| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051 | <!DOCTYPE html><html><head>    <meta charset="UTF-8">    <meta http-equiv="Cache-Control" content="no-cache,no-store,no-siteapp,must-revalidate">    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="expires" content="0">    <meta name="author" content="">    <meta name="description" content=""/>    <meta name="keywords" content="扫码支付,线上投币,运营数据,物联网"/>    <meta name="format-detection" content="telephone=no,email=no">    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">    <title>端口管理</title>    <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/mui.min.css">    <link rel="stylesheet" href="../components/custom/css/common.css">    <link rel="stylesheet" href="css/xyf.common.min.css">    <style>        .oper-btn {            margin-right: -5px;        }        .port-head {            width: 100%;        }        .port-info {            float: left;            width: 50%;            overflow: hidden;            white-space: nowrap;            text-overflow: ellipsis;        }        .mui-table-view-cell:after{            left: 0;        }        .order-info,.order-info-loading {            background: #fafafb;            position: relative;            padding: 6px;            margin: 8px 0;        }        .p-title{        }        .power-graph-box {            background: #fff;            width: 100%;            height: 220px;            padding: 0;        }        .chart-box {            background: #fff;            width: 100%;            height: 220px;        }    </style></head><body class=""><h4 class="param-title" id="device">设备</h4><div class="mui-input-group mui-control-content mui-active" id="portPanel"></div><!--生成二维码--><div class="common-mask" id="codePanel">    <div class="common-model">        <div class="common-model-tit">长按二维码保存        </div>        <img id="previewImg" style="margin: auto;display: block">        <div class="common-model-close" onclick="closeQRCode()">关闭</div>    </div></div><div class="common-mask" id="showPG">    <div class="common-model">        <div class="common-model-tit" id="pgTitle">数据获取中...</div>        <div class="power-graph-box chart-box" id="powerGraph"></div>        <div class="common-model-close" onclick="closePG()">关闭</div>    </div></div><!--没有操作按钮--><script type="text/html" id="modal100201">    <div class="mui-table-view-cell">        <div class="port-head">            <span class="port-name"></span>        </div>    </div></script><!--有停止、启用、禁用--><script type="text/html" id="modal100202">    <div class="mui-table-view-cell">        <div class="port-head">            <span class="port-name"></span>            <span data-id="33" class="mui-pull-right oper-btn font-b-8" permission="manage-show">            <em onclick="stopPort()" class="padding-5 stopPort mui-hidden"><i                    class="iconfont icon-close-dark font-18 c-lgreen"></i><i                    class="">停止</i></em>            <em onclick="activePort()" class="padding-5 activePort"><i class="iconfont icon-fault font-16 "></i><i                    class="word"> 禁用</i></em>        </span>        </div>    </div></script><!--只有停止--><script type="text/html" id="modal100203">    <div class="mui-table-view-cell">        <div class="port-head">            <span class="port-name"></span>            <span data-id="33" class="mui-pull-right oper-btn font-b-8" permission="manage-show">            <em onclick="stopPort()" class="padding-5 stopPort mui-hidden"><i                    class="iconfont icon-close-dark font-18 c-lgreen"></i><i                    class="">停止</i></em>            </span>        </div>    </div></script><!--100805的充电柜 可以直接进行开锁的--><script type="text/html" id="modal100805">    <div class="mui-table-view-cell">        <div class="port-head">            <span class="port-name"></span>            <span data-id="33" class="mui-pull-right oper-btn font-b-8" permission="manage-show">            <em onclick="unlockPort()" class="padding-5 stopPort "><i                    class="iconfont icon-unlock font-18 c-red"></i><i                    class=""> 开锁</i></em>            </span>        </div>    </div></script><!--换电柜 直接启动给电池充电--><script type="text/html" id="modal100230">    <div class="mui-table-view-cell">        <div class="port-head">            <span class="port-name"></span>            <span data-id="33" class="mui-pull-right oper-btn font-b-8" permission="manage-show">            <em onclick="activePort()" class="padding-5 activePort">                <i class="iconfont icon-fault font-16 "></i>                <i class="word"> 禁用</i>            </em>            <em onclick="chargePort()" class="padding-5 chargePort">                <i class="iconfont icon-start font-16 c-green"></i>                <i class=""> 充电</i>            </em>            </span>        </div>    </div></script><div id="stopTypeMenu" class="mui-popover mui-popover-action mui-popover-bottom">    <ul class="mui-table-view">        <li class="mui-table-view-cell" onclick="confirmStop('dealerStopUsingPort')">            <div class='mui-navigate-right'><span>管理员停止端口</span></div>        </li>        <li class="mui-table-view-cell" onclick="confirmStop('dealerCancelOrder')">            <div class='mui-navigate-right'><span>管理员取消订单</span></div>        </li>        <li class="mui-table-view-cell" onclick="confirmStop('illegalUseStop')">            <div class='mui-navigate-right'><span>违规使用停止</span></div>        </li>        <li class="mui-table-view-cell" onclick="confirmStop('packageMismatchStop')">            <div class='mui-navigate-right'><span>套餐不符停止</span></div>        </li>    </ul></div><script src="https://cdn.washpayer.com/components/lib/jquery.min.js"></script><script src="../components/lib/jquery.qrcode.min.js"></script><script src="../components/lib/echarts.js"></script><script src="https://cdn.washpayer.com/components/lib/moment.min.js"></script><script src="https://cdn.washpayer.com/components/lib/mui.min.js"></script><script src="/components/custom/js/common.js"></script><script src="js/xyf.common.js"></script><script src="js/device-features.js"></script><script>    var logicalCode = getQueryString("logicalCode");    var code = getQueryString("code");    var type = getQueryString("type");    $("#device").html("<i class='c-primary iconfont " + getDevIconName(type) + "'></i> " + type + logicalCode + '的端口');    var portListUrl = "/dealer/getDevicePort"    if (code === "100206" || code === "100202"|| code === "100256"|| code === "101206" || code === "102256" || code === "103210") {        portListUrl = "/dealer/getPortsInfo"    }    //获取 设备功能设置    sendRequest({        url: portListUrl,        type: "GET",        data: {logicalCode: logicalCode},        mask: "正在获取端口信息...",        success: function (response) {            if (response.result == 1) {                var payload = response.payload;                if (payload.isManager || payload.isManager == null) {                    $("body").attr("role", "manage");                } else {                    $("body").attr("role", "limit-user");                }                var portList = payload.portList;                if (portList.length > 0) {                    for (var index in portList) {                        var port = portList[index];                        if (code) {                            setNodeData(code, port);                        }                    }                }            } else {                mui.toast(response.description);            }        }    });    function loadOnePort(dom, portConfig, port) {        sendRequest({            url: "/dealer/getDevicePortDetail",            type: "GET",            data: {logicalCode: logicalCode, portIndex: port.index},            mask: "正在获取端口详细信息...",            success: function (response) {                if (response.result === 1) {                    var payload = response.payload;                    renderPortDetail(dom, portConfig, payload)                } else {                    mui.toast(response.description);                }            }        });    }    function getPortStatusDom(status) {        var statusMap = {            // 这三个状态根据配置来确定是否可用            idle: {                name: '空闲',                style: 'c-success'            },            busy: {                name: '繁忙',                style: 'c-lgreen'            },            finished: {                name: '完成',                style: 'c-success'            },            connected: {                name: '连接',                style: 'c-lgreen'            },            // 以下两个状态 完全不能用            fault: {                name: '故障',                style: 'c-red'            },            ban: {                name: '禁用',                style: 'font-4'            },            estop: {                name: '急停状态',                style: 'c-red'            },            ready: {                name: '就绪',                style:  'c-lgreen'            },            // 0:'空闲',            // 1:'繁忙',            // 2:'故障',            // 3:'禁用',            // 4:'暂停',            // 5:'已连接',            // 6:'充电完成',            // 7:'维护中',            // 8:'预约中',            0: {                name: '空闲',                style: 'c-success'            },            1: {                name: '繁忙',                style: 'c-lgreen'            },            2: {                name: '故障',                style: 'c-red'            },            3: {                name: '禁用',                style: 'c-red'            },            4: {                name: '暂停',                style: 'c-lgreen'            },            5: {                name: '已连接',                style: 'c-success'            },            6: {                name: '充电完成',                style: 'c-success'            },            7: {                name: '维护中',                style: 'c-red'            },            8: {                name: '预约中',                style: 'c-red'            },            10: {                name: '占位状态',                style: 'c-lgreen'            },            11: {                name: '急停状态',                style:  'c-red'            },            12: {                name: '就绪',                style:  'c-success'            },            13: {                name: '继电器粘连',                style:  'c-red'            },        }        var item = statusMap[status]        // 普通充电桩        if (item) {            return "<span class='" + item.style + "'>" + item.name + "</span>"        } else {            return "<span class='font-4'>未知</span>"        }    }    function setNodeData(code, port) {        var dom;        // todo 缺少参数mcuVersion ,但目前的后台实现机制其实也用不上了        var devFeatures = getDeviceFeatures({code: code});        var portConfig = devFeatures.portConfig        // 如果没有端口配置,说明没有操作按钮        if (!portConfig) {            dom = $($("#modal100201").html());        } else if (portConfig.stop && portConfig.toggle) {            dom = $($("#modal100202").html());            var banBtn = '<i class="iconfont icon-fault font-16 c-red"></i><i class="word"> 禁用</i>';            if (port.status == "busy") {                dom.find(".stopPort").removeClass("mui-hidden");            } else if (port.status == "fault" || port.status == "ban") {                banBtn = '<i class="iconfont icon-start font-16 c-success"></i><i class="word"> 启用</i>';            }            //todo 停止|启动,似乎目前只有停止,不能远程启动?            dom.find(".activePort").html(banBtn);        } else if (portConfig.toggle && portConfig.charge) {            dom = $($("#modal100230").html());            if (port.status == "ban" || port.status == "fault"){                var banBtn = '<i class="iconfont icon-start font-16 c-success"></i><i class="word"> 启用</i>';                dom.find(".activePort").html(banBtn);            }        } else if (portConfig.toggle) {            dom = $($("#modal100202").html());            var banBtn = '<i class="iconfont icon-fault font-16 c-red"></i><i class="word"> 禁用</i>';            if (port.status == "fault" || port.status == "ban") {                banBtn = '<i class="iconfont icon-start font-16 c-success"></i><i class="word"> 启用</i>';            }            dom.find(".activePort").html(banBtn);        } else if (portConfig.stop) {            dom = $($("#modal100203").html());            if (port.status == "busy"  || port.status == "ready") {                dom.find(".stopPort").removeClass("mui-hidden");            } else {            }        } else if (portConfig.unlock) {            dom = $($("#modal100805").html());        }        if (!dom) {            return        }        //端口基本信息        dom.find(".port-name").text("端口:" + port.index).append('<span class="margin-l-10 port-status"></span>');        dom.attr("index", port.index);        dom.attr("status", port.status);        dom.find(".port-status").html(getPortStatusDom(port.status));        $("#portPanel").append(dom);        if (port.isLazy) {            var loadingDom = $('<div class="order-info-loading mui-clearfix mui-navigate-right">' +                ' <em class="padding-5 ">' +                '                <i class="iconfont icon-eye font-18 c-blue"></i><i class="word"> 工作详情</i>' +                '            </em></div>')            loadingDom.on('click', function () {                $(this).remove()                loadOnePort(dom, portConfig, port)            })            dom.append(loadingDom)        }        renderPortDetail(dom, portConfig, port)    }    var gearMap = {        0: "第一档",        1: "第二档",        2: "第三档",        3: "第四档",        4: "第五档",    }    function renderPortDetail(dom, portConfig, port) {        dom.find('.order-info,.port-foot').remove() // 先尝试清空旧的信息        function getPayTypeEnum(item, type) {            // 单位后台确定            var payTypeEnum = {                'mobile': '扫码付费' + (item.coins || 0),                'mobile_vcard': '虚拟卡抵扣',                'monthlyPackage': '包月卡抵扣',                'coin': '投币' + (item.coins || 0),                'card': '刷卡' + (item.coins || 0),                'serverBilling': '后台计费',                'powerBilling': '功率计费',                'postpaid': '后付费',                'billAsServicePostpaid': '后付费',                'isFree': '免费时段',                null: "未知"            }            return payTypeEnum[type]        }        var devDom = $('<div class="order-info mui-clearfix"><div class="font-14 p-title">设备详情</div></div>')        var orderDom = $('<div class="order-info mui-clearfix"><div class="font-14 p-title">当前订单详情</div></div>')        dom.append(devDom)        dom.append(orderDom)        // 公共字段,订单信息        if (port.nickName) {            orderDom.append('<p class="port-info no-alert margin-t-5 "  onclick="goUser(\'' + (port.openId || '') + '\')"><span class="">用户昵称:</span><span class="c-success">' + port.nickName + '</span></p>')        }        if (port.cardNo) {            orderDom.append('<p class="port-info no-alert margin-t-5 " onclick="goUserCard(\'' + (port.openId || '') + '\')"><span class="">卡号:</span><span class="c-success" >' + port.cardNo + '</span></p>')        }        if (port.cardName) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">卡名:</span><span class="c-success">' + port.cardName + '</span></p>')        }        if (port.pw != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">密码:</span><span class="c-success">' + port.pw + '</span></p>')        }        if (port.consumeType != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">消费:</span><span class="c-success">' + getPayTypeEnum(port,port.consumeType) + '</span></p>')        }        if (port.elecFee != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">电量费用:</span><span class="c-success">' + port.elecFee + '</span>元</p>')        }        if (port.serviceFee != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">服务费:</span><span class="c-success">' + port.serviceFee + '</span>元</p>')        }        if (port.statusErrorInfo != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">异常信息:</span><span class="c-red">' + port.statusErrorInfo + '</span></p>')        }        if (port.faultDesc != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">故障描述:</span><span class="c-red">' + (port.faultDesc || '') + '</span></p>')        }        if (port.startTime != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">开始时间:</span><span class="c-success">' + (port.startTime) + '</span></p>')        }        if (port.needTime != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">订购时间:</span><span class="c-success">' + (port.needTime || 0) + '</span></p>')        }        if (port.actualNeedTime != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">实际预定时间:</span><span class="c-success">' + port.actualNeedTime + '</span>分钟</p>')        }        if (port.usedTime != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">已充时间:</span><span class="c-success">' + (port.usedTime || 0) + '</span>分钟</p>')        }        if (port.duration != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">充电时间:</span><span class="c-success">' + (port.duration || 0) + '</span>分钟</p>')        }        if (port.leftTime != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">剩余时间:</span><span class="c-success">' + (port.leftTime || 0) + '</span>分钟</p>')        }        if (port.occTime != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">占位时间:</span><span class="c-success">' + (port.occTime || 0) + '</span>分钟</p>')        }        if (port.allPayMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">订单总金额:</span><span class="c-success">' + (port.allPayMoney || 0) + '</span></p>')        }        if (port.consumeMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">已消费金额:</span><span class="c-success">' + (port.consumeMoney || 0) + '</span></p>')        }        if (port.chargedMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">已充金额:</span><span class="c-success">' + (port.chargedMoney || 0) + '</span>元</p>')        }        if (port.leftMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">本次消费余额:</span><span class="c-success">' + (port.leftMoney || 0) + '</span></p>')        }        if (port.leftElec != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">剩余电量:</span><span class="c-success">' + (port.leftElec || 0) + '</span>度</p>')        }        if (port.usedElec != null && port.usedElec !=0) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">已充入电量:</span><span class="c-success">' + (port.usedElec || 0) + '</span>度</p>')        }        if (port.elec != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">已充电量:</span><span class="c-success">' + (port.elec || 0) + '</span>度</p>')        }        if (port.needElec != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">订购电量:</span><span class="c-success">' + (port.needElec || 0) + '</span>度</p>')        }        if (port.cardConsumeMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">本次刷卡已使用:</span><span class="c-success">' + (port.cardConsumeMoney || '') + '</span></p>')        }        if (port.lastPayMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">单次刷卡金额:</span><span class="c-success">' + (port.lastPayMoney || '') + '</span></p>')        }        if (port.cardLeftMoney != null) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">本次刷卡剩余:</span><span class="c-success">' + (port.cardLeftMoney || '') + '</span></p>')        }        if (port.cardBalance) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">卡上余额:</span><span class="c-success">' + (port.cardBalance || '') + '</span></p>')        }        if (port.sequanceNo) {            orderDom.append('<p class="port-info margin-t-5 "><span class="">流水号:</span><span class="c-success">' + (port.sequanceNo || '') + '</span></p>')        }        // 等待执行的订单        if (port.waittingOrder && port.waittingOrder.length) {            for (var index in port.waittingOrder) {                var item = port.waittingOrder[index]                var orderWaitDom = $('<div class="order-info mui-clearfix"><div class="font-14 p-title">等待执行订单' + (parseInt(index) + 1) + '</div></div>')                dom.append(orderWaitDom)                if (item.createTime != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">创建时间:</span><span class="c-success">' + item.createTime + '</span></p>')                }                 if (item.nickName != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">用户昵称:</span><span class="c-success">' + item.nickName + '</span></p>')                }                if (item.consumeType != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">消费:</span><span class="c-success">' + getPayTypeEnum(item, item.consumeType) + '</span></p>')                }                if (item.needTime != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">订购时间:</span><span class="c-success">' + (item.needTime || 0) + '</span></p>')                }                if (item.needElec != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">订购电量:</span><span class="c-success">' + (item.needElec || '') + '</span>度</p>')                }                if (item.cardNo != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">卡号:</span><span class="c-success">' + item.cardNo + '</span></p>')                }               if (item.cardBalance != null) {                    orderWaitDom.append('<p class="port-info margin-t-5 "><span class="">卡上余额:</span><span class="c-success">' + item.cardBalance + '</span></p>')                }            }        }        let qiangStatusMap = {            yes: '是',            no: '否',            unknow: '未知'        }        // 设备信息        if (port.power != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">功率:</span><span class="c-success">' + (port.power || 0) + '</span>瓦</p>')        }        if (port.STA != null) {            devDom.append('<p class="port-info margin-t-5"><span>STA:</span><span class="c-success">' + (port.STA || '') + '</span></p>')        }        if (port.isPlugin != null) {            devDom.append('<p class="port-info margin-t-5"><span>是否插枪:</span><span class="c-success">' + (qiangStatusMap[port.isPlugin] || '') + '</span></p>')        }        if (port.qiangGuiwei != null) {            devDom.append('<p class="port-info margin-t-5"><span>枪是否归位:</span><span class="c-success">' + (qiangStatusMap[port.qiangGuiwei] || '') + '</span></p>')        }        if (port.electricity != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电流:</span><span class="c-success">' + (port.electricity || 0) + '</span>安</p>')        }        if (port.current != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电流:</span><span class="c-success">' + (port.current || 0) + '</span>安</p>')        }        if (port.ampere != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电流大小:</span><span class="c-success">' + (port.ampere || 0) + '</span>安</p>')        }        if (port.outputVoltage != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">输出电压:</span><span class="c-success">' + (port.outputVoltage || 0) + '</span>伏</p>')        }        if (port.outputElec != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">输出电流:</span><span class="c-success">' + (port.outputElec || 0) + '</span>安</p>')        }        if (port.chargeStatus != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">充电状态:</span><span class="c-success">' + (port.chargeStatus || 0) + '</span></p>')        }        if (port.batteryVoltage != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电池电压:</span><span class="c-success">' + (port.batteryVoltage || 0) + '</span>伏</p>')        }        if (port.voltage != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电压:</span><span class="c-success">' + (port.voltage || 0) + '</span>伏</p>')        }        if (port.doorStatus != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">柜门状态:</span><span class="c-success">' + (port.doorStatus || '') + '</span></p>')        }        if (port.batteryImei != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电池编号:</span><span class="c-success">' + (port.batteryImei || '') + '</span></p>')        }        if (port.devTemp != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">充电桩芯片组温度:</span><span class="c-success">' + (port.devTemp || '') + '</span>℃</p>')        }        if (port.elecPoint != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">电量百分比:</span><span class="c-success">' + (port.elecPoint || 0) + '</span></p>')        }        if (port.gear != null) {            devDom.append('<p class="port-info margin-t-5 "><span class="">充电档位:</span><span class="c-success">' + (gearMap[port.gear]) + '</span></p>')        }        //公共的 2018.6.5 所有设备的端口都需要:扫码带端口号的二维码直接使用        dom.append('<p class="port-foot mui-text-right margin-t-5">' +            (port.showPG != null ? ('<span class="iconfont icon-chart-line c-green font-18 padding-10" style="vertical-align: -2px;" onclick="goPowerGraph(\'' + port.index + '\',' + '\'' + (port.startTime || '') + '\')"></span>') : '') +            '<span class="iconfont icon-qrcode c-primary padding-10" onclick="getQRCode(\'' + port.index + '\')"></span>' +            '</p>')        if (portConfig && portConfig.param) {            dom.append('<p class="port-foot padding-t-10 c-primary" onclick="goConfig(\'' + port.index + '\')"><i class="iconfont icon-setting"></i> 参数配置</p>')        }        // 隐藏不含信息的模块        if (devDom.find('p.port-info').length === 0) {            devDom.hide()        }        if (orderDom.find('p.port-info').length === 0) {            orderDom.hide()        }    }    var lastPort = null    // 立马停止充电    function stopPort() {        var dom = $(event.target).closest(".mui-table-view-cell");        lastPort = dom.attr("index");        if (code == 110700) {            mui('#stopTypeMenu').popover('toggle');            return        }        confirmStop()    }    function confirmStop(type){        var tit = "您确定要立即停止充电?";        var btnArray = ['取消', '确定'];        mui.confirm(tit, '温馨提示', btnArray, function (e) {            if (e.index == 1) {                sendRequest("/device/operDevicePort", "POST", {                    logicalCode: logicalCode,                    stop: true,                    type: type,                    portIndex: lastPort                }, function (response) {                    if (response.result == 1) {                        mui.toast("操作成功");                        setTimeout(function () {                            window.location.reload();                        }, 1000);                    } else {                        mui.toast(response.description);                    }                });            }        });    }    function unlockPort() {        var dom = $(event.target).closest(".mui-table-view-cell");        var index = dom.attr("index");        var tit = "您确定要立即开锁?";        var btnArray = ['取消', '确定'];        mui.confirm(tit, '温馨提示', btnArray, function (e) {            if (e.index == 1) {                sendRequest("/device/unlockPort", "POST", {                    logicalCode: logicalCode,                    portIndex: index                }, function (response) {                    if (response.result == 1) {                        mui.toast("操作成功");                        setTimeout(function () {                            window.location.reload();                        }, 1000);                    } else {                        mui.toast(response.description);                    }                });            }        });    }    // 启动端口的充电    function chargePort() {        var dom = $(event.target).closest(".mui-table-view-cell");        var index = dom.attr("index");        var status = dom.attr("status");        var chargePort = true;        var tit = "";        if (status === "idle") {            tit = "确定启动该端口充电?";        } else {            tit = "确定停止该端口充电?";        }        var btnArray = ['取消', '确定'];        mui.confirm(tit, '温馨提示', btnArray, function (e) {            if (e.index == 1) {                sendRequest(                    "/device/operDevicePort",                    "POST",                    {                        logicalCode: logicalCode,                        charge: chargePort,                        portIndex: index                    },                    function (response) {                        if (response.result == 1) {                            mui.toast("操作成功");                            // setTimeout(                            //     function () {                            //         window.location.reload();                            //     },                            //     1000                            // );                        } else {                            mui.toast(response.description);                        }                    }                );            }        });    }    // 启用或禁用充电端口    function activePort() {        var dom = $(event.target).closest(".mui-table-view-cell");        var index = dom.attr("index");        var status = dom.attr("status");        var active = "";        var tit = "";        if (status == "ban" || status == "fault") {            active = true;            tit = "您确定要启用该端口?";        } else {            active = false;            tit = "您确定要禁用该端口?";        }        var btnArray = ['取消', '确定'];        mui.confirm(tit, '温馨提示', btnArray, function (e) {            if (e.index == 1) {                sendRequest("/device/operDevicePort", "POST", {                    logicalCode: logicalCode,                    active: active,                    portIndex: index                }, function (response) {                    if (response.result == 1) {                        mui.toast("操作成功");                        setTimeout(function () {                            window.location.reload();                        }, 1000);                    } else {                        mui.toast(response.description);                    }                });            }        });    }    //生成带端口号的二维码    function getQRCode(index) {        $("#codePanel").show();        var protocol = location.protocol;        if (logicalCode.indexOf('B') > -1) {            protocol = "https:"        }        var currentDomain = protocol + "//" + location.host;        var userUrl = currentDomain + "/userLogin?l=" + logicalCode + "&chargeIndex=" + index;        var dataURL = getQRCodeImageData(userUrl, logicalCode + '-' + index);        $("#previewImg").attr({            "width": 200,            "height": 230,            "src": dataURL        });    }    function goConfig(index) {        var devFeatures = getDeviceFeatures({code: code});        var portConfig = devFeatures.portConfig        var url = portConfig.param;        var option = {            logicalCode: logicalCode,            port: index,            type: type,        };        if (url) {            goPage(url, option);        } else {            mui.alert('该设备端口无法进行参数配置', '提示', '确定');        }    }    function closeQRCode() {        $("#codePanel").hide();    }    function goPowerGraph(index, startTime) {        function powerChartOption(showCurrent, dataList) {            var xData = [];            var powerSeries = [];            var voltageSeries = [];            var currentSeries = [];            for (var index in dataList) {                let item = dataList[index]                xData.push(moment(item.time).format("HH:mm"));                powerSeries.push(parseFloat(item.power));                voltageSeries.push(parseFloat(item.voltage));                currentSeries.push(parseFloat(item.current));            }            var option = {                grid: {                    x: 40,                    x2: 15,                    y: 45,                    y2: 40,                },                toolbox: {                },                tooltip: {                    trigger: 'axis',                    axisPointer: {                        lineStyle: {                            color: '#108EE9',                            width: .3,                        }                    }                },                legend: {                    data: ['功率']                },                xAxis: [{                    type: 'category',                    axisLabel: {                        textStyle: {                            color: "#aaa",                            fontSize: "12px"                        }                    },                    axisTick: {                        show: false,                    },                    axisLine: {                        show: false,                    },                    data: xData,                    min: 'dataMin',                    max: 'dataMax'                }],                yAxis: [                    {                        type: 'value',                        axisLabel: {                            textStyle: {                                color: "#aaa",                                fontSize: "12px"                            }                        },                        axisTick: {                            show: false,                        },                        axisLine: {                            show: false,                        },                        splitLine: {                            lineStyle: {                                color: '#ccc',                                width: 0.3,                                type: 'dotted'                            }                        },                    }                ],                series: [                    {                        name: '功率',                        type: 'line',                        itemStyle: {                            normal: {                                color: "#108EE9",                            }                        },                        data: powerSeries                    }                ]            };            if (showCurrent == true) {                option.legend.data = option.legend.data.concat(['电压', '电流'])                option.series = option.series.concat([{                    name: '电压',                    type: 'line',                    itemStyle: {                        normal: {                            color: "#07C160",                        }                    },                    data: voltageSeries                }, {                    name: '电流',                    type: 'line',                    itemStyle: {                        normal: {                            color: "#ED6066",                        }                    },                    data: currentSeries                }])            }            return option        }        moment.locale('zh-cn');        var _startTime = moment().subtract(8, 'hour').format("YYYY-MM-DD HH:mm:ss")        var _endTime = moment().format("YYYY-MM-DD HH:mm:ss")        if (startTime) {            _startTime = moment(startTime.substr(-14, 14), 'MM-DD HH:mm:ss').subtract(4, 'hour').format("YYYY-MM-DD HH:mm:ss")        }        $("#showPG").show();        $("#pgTitle").html('功率曲线( 端口: <em class="c-success">' + index + '</em> )' );        var powerGraph = echarts.init(document.getElementById('powerGraph'));        let url = '/common/getPowerGraph'        sendRequest({            url: url,            type: "GET",            data: {                logicalCode: logicalCode,                startTime: _startTime,                endTime: _endTime,                port: index            },            mask: "正在获取端口详细信息...",            success: function (response) {                if (response.result === 1) {                    var payload = response.payload;                    powerGraph.setOption(powerChartOption(0, payload.dataList))                    powerGraph.resize()                } else {                    mui.toast(response.description);                }            }        });}    function closePG() {        $("#showPG").hide();    }    function goUpper() {        var url = "remote-upper.html";        var option = {logicalCode: logicalCode,}        goPage(url, option);    }    function goUser(openId) {        if (openId) {            var url = "/dealer/index.html#/user/detail?openId=" + openId            goPage(url);        }    }    function goUserCard(openId) {        if (openId) {            var url = "/app/card-manage.html?userId=" + openId            goPage(url);        }    }    // 点击字段看详情    $(function () {        $('body').on('click', '.port-info:not(".no-alert")', function () {            mui.alert($(this).text())        })    })</script></body></html>
 |