| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340 | <!DOCTYPE html><!--suppress ALL --><html><head>    <meta charset="utf-8"/>    <meta name="author" content=""/>    <meta name="description" content=""/>    <meta name="keywords" content="扫码支付,线上投币,运营数据,物联网"/>    <meta name="format-detection" content="telphone=no,email=no"/>    <meta name="viewport"          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>    <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">    <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"/>    <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/mui.picker.min.css"/></head><style>    .nav-container {        padding-bottom: 60px;        position: absolute;        height: 100%;        width: 100%;    }    /*定制样式*/    .mgr-bd {        transition: .25s all ease-in-out;        height: calc(100% - 80px - 50px);        margin-top: 80px;    }    .mui-icon.mui-icon-clear {        right: 0;    }    .or-order-status .mui-radio input {        position: relative;        right: auto;        top: 2px;    }    #pullrefresh .mui-scroll {        top: 1px;    }    .device-mgr .c-handle-panel {        bottom: 50px;    }    .hide_device_working_status .working-status {        display: none;    }    /*由于批量设置的按钮可能存在多行,得多留点底部空间*/    .list {        padding-bottom: 40px;    }</style><body class="device-mgr"><div class="nav-container">    <div class="mui-input-group mui-reset">        <form class="mui-row" action="">            <div class="mui-col-xs-7 mui-col-sm-7">                <div class="mui-input-row mui-search">                    <input type="search" class="mui-input-clear" id="searchKey" placeholder="设备编号/投放地址">                </div>            </div>            <div class="mui-col-xs-5 mui-col-sm-5 mui-text-right">                <div class="filter-btn"><span>筛选</span><i class="iconfont icon-triangle-up"></i></div>                <div class="in-row-btn" onclick="batchOper()">多选<i class="iconfont icon-triangle-up"></i></div>            </div>        </form>    </div>    <div class="filter-panel" style="display: none" id="options">        <div class="input-group-vertical mui-table-view clear-b-border">            <div class="or-border-fir mui-input-row input-clear or-order-status" id="showPickerAddress">                <label class="or-label-text">地址</label>                <span class="mui-icon mui-icon-arrowright"></span>                <span class="or-order-status-font or-longWrap selected-text or-ellipsis">全部</span>            </div>            <div class="or-border-fir mui-input-row input-clear or-order-status" id="showPickerStatus">                <label class="or-label-text">状态</label>                <span class="mui-icon mui-icon-arrowright"></span>                <span class="or-order-status-font or-longWrap selected-text or-ellipsis">全部</span>            </div>            <div class="or-border-fir mui-input-row input-clear or-order-status">                <label class="or-label-text">排序<span></span></label>                <div class="mui-row or-order-status-font">                    <div class="mui-radio mui-col-xs-4 mui-col-sm-4">                        <input class="" value="logicalCode" type="radio" name="sortName" checked>                        <span class="font-14">编号</span>                    </div>                    <div class="mui-radio mui-col-xs-4 mui-col-sm-4">                        <input class="" value="devType" type="radio" name="sortName">                        <span class="font-14">类型</span>                    </div>                    <div class="mui-radio mui-col-xs-4 mui-col-sm-4">                        <input class="" value="tag" type="radio" name="sortName">                        <span class="font-14">标签</span>                    </div>                    <div class="mui-radio mui-col-xs-4 mui-col-sm-4">                        <input class="" value="remarks" type="radio" name="sortName">                        <span class="font-14">备注</span>                    </div>                </div>            </div>            <div class="mui-input-row filter-panel-btn flexbox">                <span class="cancel-btn flex">取消</span>                <span class="ok-btn flex">确定</span>            </div>        </div>    </div>    <h5 class="dev-top-info flexbox">        <div class="flex"><span class="putOnAddress">0</span>个地址,<span class="equipmentNum">0</span>台设备</div>        <span class="text-right handle-reg c-blue" onclick="goReg()">手动注册</span>    </h5>    <div id="pullrefresh" class="mui-content mui-clearfix mui-scroll-wrapper mgr-bd">        <!-- 设备列表 -->        <div class="mui-scroll">            <div class="list"></div>        </div>    </div>    <div class="mgr-tip mui-hidden"></div>    <div class="c-handle-panel mui-hidden">        <div class="handle-btn">            <div class="mui-checkbox ">                <input id="checkbox-all" class="checkbox-all" type="checkbox">                <label for="checkbox-all">全选</label>            </div>        </div>        <div class="handle-btn-list mui-text-right by-dev">            <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchSettingParams"                    onclick="editParams()">设备参数            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchSettingServerParams"                    onclick="editServerParams()">服务器参数            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary " onclick="editDesc()">说明            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary " onclick="editPackage()">套餐            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger mui-hidden" id="editTempPackage"                    onclick="editTempPackage()">临时套餐            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger mui-hidden" id="setAutoRefund"                    onclick="setAutoRefund()">自动退款            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger "                    onclick="setBatchDevsSwitch()">禁用            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger "                    onclick="setDND()">勿扰            </button>        </div>        <div class="handle-btn-list mui-text-right by-group">            <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchGroupSettingParams"                    onclick="editParams()">设备参数            </button>            <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchGroupSettingServerParams"                    onclick="editServerParams()">服务器参数            </button>        </div>    </div>    <!--使用说明-->    <div class="instructionsDialog edit-back mui-hidden">        <div class="edit-content">            <div class="edit-box">                <div class="reg-des">                    <label>使用说明</label>                    <textarea id="instructionsContent" maxlength="100" rows="3" placeholder=""></textarea>                </div>            </div>            <div class="mui-popup-buttons">                <span class="mui-popup-button">取消</span>                <span class="mui-popup-button mui-popup-button-bold">保存</span>            </div>        </div>    </div>    <!--多选模式,支持直接多选地址-->    <div id="batchMenu" class="mui-popover mui-popover-action mui-popover-bottom">        <ul class="mui-table-view">            <li class="mui-table-view-cell batch-dev">                设备多选            </li>            <li class="mui-table-view-cell batch-group">                地址多选            </li>        </ul>        <ul class="mui-table-view">            <li class="mui-table-view-cell batch-cancel">                取消多选            </li>        </ul>    </div></div><script src="https://cdn.washpayer.com/components/lib/jquery.min.js?v=1"></script><script src="https://cdn.washpayer.com/components/lib/mui.min.js"></script><script src="https://cdn.washpayer.com/components/lib/mui.picker.min.js"></script><script src="https://cdn.washpayer.com/components/lib/moment.min.js"></script><script src="../components/lib/moment.zh.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>    window.initDealerNav && initDealerNav('device_management'); // initDealerNav内有获取当前账号菜单权限    var statusEnum = [{value: null, text: '全部状态'},        {value: '1', text: '在线'},        {value: '0', text: '离线'},]    //设备地址 选择器    var statusPicker = new mui.PopPicker({        layer: 1    });    statusPicker.setData(statusEnum);    //设备地址 选择器    var addressPicker = new mui.PopPicker({        layer: 1    });    var condition = {};    var pageType = 'deviceMgr';    var pageIndex = 0;    var pageSize = 20;    var total = 0;    var groupCount = 0;    var isOnline = "";    var equipmentGroupId = "";    var groupName = "";    var setCondition = function () {        var data = {            searchKey: $("#searchKey").val(),            equipmentGroupId: equipmentGroupId,            groupName: groupName,            isOnline: isOnline,            sortName: $("input[name='sortName']:checked").val(),        };        var conArr = localStorage.condition ? JSON.parse(localStorage.condition) : {};        conArr[pageType] = data;        localStorage.condition = JSON.stringify(conArr);    };    //如果调到子页面,返回后还是保留查询条件    var orRecordBack = getQueryString('orRecord');    if (orRecordBack) {        history.replaceState(null, null, "device-mgr.html");//清除orRecord        condition = localStorage.condition ? JSON.parse(localStorage.condition)[pageType] : {};        if (condition.searchKey) {            $("#searchKey").val(condition.searchKey);        }        if (condition.isOnline != null) {            isOnline = condition.isOnline            for (var index in statusEnum) {                if (statusEnum[index].value == condition.isOnline) {                    statusPicker.pickers[0].setSelectedValue(statusEnum[index].value);                    $('#showPickerStatus .selected-text').html(statusEnum[index].text);                }            }        }        if (condition.equipmentGroupId) {            equipmentGroupId = condition.equipmentGroupId            groupName = condition.groupName        }        if (condition.sortName) {            $("[value='" + condition.sortName + "']")[0].checked = true;        }    } else {        // 如果是刷新进来该页面,则清空掉条件缓存        setCondition()    }    var addressPickerOper = {        getEquipmentNumAndAdressList: function (callback) {            var $scope = this;            sendRequest('/device/getEquipmentNumAndAddressList', 'post', {}, function (res) {                if (res.result == 1) {                    var pickerDatas = []                    pickerDatas.push({                        value: null,                        text: '全部投放地址',                    });                    var datas = res.para.groups                    for (var i = 0, length = datas.length; i < length; i++) {                        var item = {                            value: datas[i].groupId,                            text: datas[i].name,                        };                        pickerDatas.push(item);                    }                    addressPicker.setData(pickerDatas);                    if (callback) {                        callback()                    }                } else {                    mui.toast(res.description);                }            })        },        setEquipmentNumAndAddressNum: function (AddressNum, equipmentNum) {            $('.putOnAddress').text(AddressNum);            $('.equipmentNum').text(equipmentNum);        },    };    // 需要等待地址加载出来,然后才初始化所有的参数    addressPickerOper.getEquipmentNumAndAdressList(function () {        if (equipmentGroupId) {            addressPicker.pickers[0].setSelectedValue(equipmentGroupId);            $('#showPickerAddress .selected-text').html(groupName);        }    });    var FeatureMap = {}    var groupBatchFeature = ['batchGroupSettingParams', 'batchGroupSettingServerParams']    var queryFeature = ['hide_device_working_status', 'batchSettingParams', 'batchSettingServerParams',].concat(groupBatchFeature)    getFeatureList("dealer", {list: queryFeature}, function (payload) {        FeatureMap = payload;        // 隐藏工作状态的特性        if (payload.hide_device_working_status) {            $('body').addClass('hide_device_working_status')        }        // 批量设置参数的特性        if (payload.batchSettingParams) {            $(".batchSettingParams").removeClass("mui-hidden")        }        // 批量设置参数的特性        if (payload.batchSettingServerParams) {            $(".batchSettingServerParams").removeClass("mui-hidden")        }        if (payload.batchGroupSettingParams) {            $(".batchGroupSettingParams").removeClass("mui-hidden")        }        if (payload.batchGroupSettingServerParams) {            $(".batchGroupSettingServerParams").removeClass("mui-hidden")        }    });    sendRequest("/dealer/accountInfo", "GET", null, function (response) {        if (response.result == 1) {            var payload = response.payload            // 临时套餐            if (payload.hasTempPackage) {                $("#editTempPackage").removeClass("mui-hidden")            }        } else {            mui.toast(response.description);        }    });    FilterComponent({        ok: function () {            /*合法性验证*/            pageIndex = 0;            searchByKey()        }    });    //全选    $("#checkbox-all").on("change", function () {        if ($(this).is(":checked")) {            $(".checkbox-btn").prop("checked", true);        } else {            $(".checkbox-btn").prop("checked", false);        }    });    //复选框事件重写    $("#pullrefresh").on("tap", ".mui-checkbox-wear", function (evt) {        var box = $(this).find(".mui-checkbox input");        if (box.is(":checked")) {            box.prop("checked", false);        } else {            box.prop("checked", true);        }        evt.stopPropagation();        evt.preventDefault();    }).on("tap", ".groupSelect", function () {        //组全选:该事件必须在上个事件之后        var input = $(this).find("input");        var checked = input.is(":checked");        var groupDom = $(this).closest("li").find(".group-content");        if (checked) {            groupDom.find(".checkbox-btn").prop("checked", true);        } else {            groupDom.find(".checkbox-btn").prop("checked", false);        }    });    // 页面跳转前标记说明:要缓存过滤条件    function pageJumpOper(url) {        history.replaceState(null, null, "device-mgr.html?orRecord=true&t=" + new Date().getTime());//再次返回该页面会带上orRecord        goPage(url);    }    //去手动注册    function goReg() {        var url = "/dealer/index.html#/deviceReg?handle=true";        pageJumpOper(url);    }    mui('#batchMenu').on('tap', 'li', function () {        if ($(this).hasClass('batch-dev')) {            batchOperByDev()        } else if ($(this).hasClass('batch-group')) {            batchOperByGroup()        } else if ($(this).hasClass('batch-cancel')) {            batchOperCancel()        }        mui('#batchMenu').popover('toggle');    });    //激活批量操作    function batchOper() {        // 默认为设备多选,如果配置了地址批量选择,则多一个地址批量选择的选项        var flag = false        $(groupBatchFeature).each(function (index, item) {            if (FeatureMap[item]) {                flag = true            }        })        if (flag) {            mui('#batchMenu').popover('toggle');            return        }        batchOperJustDev();    }    function batchOperJustDev() {        if ($("body").hasClass("batch-model")) {            batchOperCancel();        } else {            batchOperActive();        }    }    function batchOperByDev() {        $("body").removeClass("batch-model-group");        batchOperActive();    }    function batchOperByGroup() {        $("body").addClass("batch-model-group");        batchOperActive();    }    function batchOperActive() {        $(".in-row-btn").addClass('active');        $("body").addClass("batch-model");        $(".c-handle-panel").removeClass('mui-hidden')    }    function batchOperCancel() {        $(".in-row-btn").removeClass('active');        $("body").removeClass("batch-model");        $(".c-handle-panel").addClass('mui-hidden')    }    // 批量参数设置:主要是发到设备测的参数    function editParams() {        var isGroupModel = $('body').hasClass('batch-model-group')        var idInfo = getSelectIdInfo(true);        var type = "";        var code = null;        var logicalCodeList = [];        if (!idInfo || idInfo.idList.length == 0) {            if (isGroupModel) {                mui.toast("请选择设备组。");            } else {                mui.toast("请确保选中的都是同类设备,请重新选择。");            }            return;        } else {            type = idInfo.type;            code = idInfo.code;            logicalCodeList = idInfo.logicalCodeList;        }        // 判断要去哪个参数设置的页面        var devFeatures = getDeviceFeatures({code: code});        var url = devFeatures.param;        if (isGroupModel) {            if (url) {                var url = url + "?groupId=" + JSON.stringify(idInfo.idList) + "&code=" + code + "&type=" + type                pageJumpOper(url)            } else {                mui.alert('该设备无法进行参数配置', '提示', '确定');            }            return;        }        if (url) {            var url = url + "?logicalCode=" + JSON.stringify(logicalCodeList) + "&code=" + code + "&type=" + type            pageJumpOper(url)        } else {            mui.alert('该设备无法进行参数配置', '提示', '确定');        }    }    // 服务器参数,不用远程发命令给设备(后续服务器参数都单独的提取出来,和设备测的参数分开)    function editServerParams() {        var isGroupModel = $('body').hasClass('batch-model-group')        var idInfo = getSelectIdInfo(true);        var type = "";        var code = null;        var logicalCodeList = [];        if (!idInfo || idInfo.idList.length == 0) {            if (isGroupModel) {                mui.toast("请选择设备组。");            } else {                mui.toast("请确保选中的都是同类设备,请重新选择。");            }            return;        } else {            type = idInfo.type;            code = idInfo.code;            logicalCodeList = idInfo.logicalCodeList;        }        // 判断要去哪个参数设置的页面        var devFeatures = getDeviceFeatures({code: code});        var url = devFeatures.serverParam;        if (isGroupModel) {            if (url) {                var url = url + "?groupId=" + JSON.stringify(idInfo.idList) + "&code=" + code + "&type=" + type                pageJumpOper(url)            } else {                mui.alert('此设备无服务器参数特性', '提示', '确定');            }            return;        }        if (url) {            var url = url + "?logicalCode=" + JSON.stringify(logicalCodeList) + "&code=" + code + "&type=" + type            pageJumpOper(url)        } else {            mui.alert('此设备无服务器参数特性', '提示', '确定');        }    }    //批量编辑使用说明    function editDesc() {        var idInfo = getSelectIdInfo(true);        var idList = [];        if (!idInfo) {            mui.toast("请确保选中的都是同类设备,请重新选择。");            return;        }        if (idInfo.idList.length == 0) {            mui.toast("请您选择设备。");            return;        } else {            idList = idInfo.idList;        }        $('.instructionsDialog').removeClass('mui-hidden');        $('body').on('touchmove', function (e) {            e.preventDefault();        });        var data = {"typeId": idInfo.typeId};        var url = "/device/getInstructionsByType";        sendRequest(url, "GET", data, function (res) {            if (res.result == 1) {                //使用说明                if (res.para) {                    $('#instructionsContent').val(res.para);                    $('#instructionsContent').prop("placeholder", res.para);                }            }        });        $('.instructionsDialog .mui-popup-buttons span').off().tap(function () {            if ($(this).index() == 0) {                //点击取消                $('.instructionsDialog').addClass('mui-hidden');                $('body').off('touchmove');            } else {                //点击保存                var instructionsText = $('#instructionsContent').val();                if ($.isEmptyObject(instructionsText)) {                    return;                }                var data = {"value": idList, "instructions": instructionsText};                var url = "/device/updateEquipmentInstructions";                sendRequest(url, "POST", data, function (res) {                    if (res.result == 1) {                        $('.instructionsDialog').addClass('mui-hidden');                        mui.toast("保存成功");                        $('body').off('touchmove');                    } else {                        mui.toast(res.description);                    }                }, "json");            }            return false;        });    }    //批量编辑套餐    function editPackage() {        var idInfo = getSelectIdInfo(true);        var typeId = null;        var type = "";        var code = null;        var unit = '分钟';        var logicalCodeList = [];        if (!idInfo) {            mui.toast("请确保选中的都是同类设备,请重新选择。");            return;        } else {            if (idInfo.code == 110000 || idInfo.code == 111000) {                mui.toast("售货柜不用设置套餐");                return;            }            typeId = idInfo.typeId;            type = idInfo.type;            code = idInfo.code;            unit = idInfo.unit;            logicalCodeList = idInfo.logicalCodeList;        }        if (idInfo.idList.length == 0) {            mui.toast("请您选择设备。");            return;        }        var url = "/dealer/index.html#/packageSettingsBatch?logicalCode=" + JSON.stringify(logicalCodeList) + "&unit=" + unit + "&code=" + code + "&type=" + type + "&typeId=" + typeId;        pageJumpOper(url)    }    //批量编辑临时套餐    function editTempPackage() {        var idInfo = getSelectIdInfo(true);        var typeId = null;        var type = "";        var code = null;        var unit = '分钟';        var logicalCodeList = [];        if (!idInfo) {            mui.toast("请确保选中的都是同类设备,请重新选择。");            return;        } else {            if (idInfo.code == 110000 || idInfo.code == 111000) {                mui.toast("售货柜不用设置套餐");                return;            }            typeId = idInfo.typeId;            type = idInfo.type;            code = idInfo.code;            unit = idInfo.unit;            logicalCodeList = idInfo.logicalCodeList;        }        if (idInfo.idList.length == 0) {            mui.toast("请您选择设备。");            return;        }        var url = "/dealer/index.html#/tempPackageSettingsBatch?logicalCode=" + JSON.stringify(logicalCodeList) + "&unit=" + unit + "&code=" + code + "&type=" + type + "&typeId=" + typeId;        pageJumpOper(url)    }    //批量禁用    function setBatchDevsSwitch() {        var idInfo = getSelectIdInfo();        var idList = [];        if (idInfo.idList.length == 0) {            mui.toast("请您选择设备。");            return;        } else {            idList = idInfo.idList;        }        var btnArray = ['<span class="c-red noClick">禁用</span>', '<span class="c-green noClick">启用</span>', '取消'];        mui.confirm("停用或启用这些设备", '设置', btnArray, function (e) {            if (e.index == 0 || e.index == 1) {                sendRequest({                    url: "/dealer/setBatchDevsSwitch",                    type: "POST",                    data: {                        logicalCodes: idList,                        isFault: e.index == 0                    },                    contentType: "json",                    success: function (res) {                        if (res.result == 1) {                            mui.toast("禁用成功!");                            setTimeout(function () {                                location.reload();                            }, 1200);                        } else {                            mui.toast(res.description);                        }                    }                });            }        });    }    // 去设置勿扰模式    function setDND() {        var idInfo = getSelectIdInfo();        var idList = [];        if (idInfo.logicalCodeList.length == 0) {            mui.toast("请您选择设备。");            return;        } else {            idList = idInfo.logicalCodeList;        }        localStorage.setItem('dnd_config', JSON.stringify({            isDND: true,            logicalCodes: idList        }))        goPage('/dealer/index.html#/device/switch/dnd')    }    // 某些设备支持自动退款    function setAutoRefund() {        var idInfo = getSelectIdInfo();        var idList = [];        if (idInfo.idList.length == 0) {            mui.toast("请您选择设备。");            return;        } else {            idList = idInfo.idList;        }        var btnArray = ['<span class="c-red noClick">关</span>', '<span class="c-green noClick">开</span>', '取消'];        mui.confirm("自动退款功能开关", '设置', btnArray, function (e) {            if (e.index == 0 || e.index == 1) {                sendRequest({                    url: "/device/setDevAutoRefund",                    type: "POST",                    data: {                        logicalCodes: idList,                        autoRefund: e.index,                    },                    contentType: "json",                    success: function (res) {                        if (res.result == 1) {                            mui.toast(res.description);                        } else {                            mui.toast(res.description);                        }                    }                });            }        });    }    //获取被选中设备的ID,并检测选中的设备是否同类型,todo待后台鉴权管理员才能修改后,前台不带入合伙设备ID    function getSelectIdInfo(sameTypeFlag) {        var idList = [];        var logicalCodeList = [];        var typeId = null;        var type = "";        var code = null;        var typeSame = true;//检测是否同设备类型        var unit;        // 地址批量选择模式        if ($('body').hasClass('batch-model-group')) {            $("[role='manage'] .groupSelect").each(function () {                var checked = $(this).find("input").is(":checked");                if (checked) {                    if ($(this).next()) {                        idList.push($(this).next().attr('id'))                    }                }                var dataStr = $(this).closest("li").find('.deviceRow:eq(0)').attr("data");                var dataJSON = {devType: {}};                if (dataStr) {                    dataJSON = JSON.parse(dataStr);                    type = dataJSON.type;                    code = dataJSON.devType.code; // 默认取最后一组的第一个code作为参数入口,暂时先就这样                }            });            if (idList.length) {                return {                    idList: idList,                    code: code,                    type: type,                }            }            return null        }        // 只遍历管理员下的设备        $("[role='manage'] .devCheck").each(function () {            var checked = $(this).find("input").is(":checked");            if (checked) {                var dataStr = $(this).closest(".deviceRow").attr("data");                var dataJSON = {devType: {}};                if (dataStr) {                    dataJSON = JSON.parse(dataStr);                }                var role = $(this).closest(".groupRow").attr("role");                var id = dataJSON.id;                var logicalCode = dataJSON.logicalCode;                var getTypeId = dataJSON.typeId;                var getType = dataJSON.type;                var getCode = dataJSON.devType.code;                var timeBased = dataJSON.timeBased;                //判断设备类型是否相同,合伙人设备不判断                if (role != "limit-user" && typeId != null && getTypeId != typeId && sameTypeFlag) {                    typeSame = false;                    return false;//结束循环                } else {                    typeId = getTypeId;                    code = getCode;                    type = getType;                    if (unit == null) {                        unit = dataJSON.unit;                        if (unit && unit != "null" && unit != "undefined") {                        } else {                            // 如果没有单位,则根据timeBased得到单位                            unit = (timeBased == true ? "分钟" : "次");                        }                    }                }                //判断是否是合伙人设备,合伙人设备不记录                if (role == "limit-user") {                    return;//继续循环                }                if (id) {                    idList.push(id);                }                if (logicalCode) {                    logicalCodeList.push(logicalCode);                }            }        });        if (!typeSame) {            return null;        } else {            return {                idList: idList,                logicalCodeList: logicalCodeList,                typeId: typeId,                unit: unit,                code: code,                type: type            };        }    }    /**     * 信号操作     */    var _SignalOperate = {        signalIcon: '',        setSignalIcon: function (online, signal) {            var iconClass = '';            if (signal == 0) {                iconClass = '';            } else if (signal > 0 && signal <= 6) {                iconClass = 'icon-xinhao1';            } else if (signal >= 7 && signal <= 12) {                iconClass = 'icon-xinhao2';            } else if (signal >= 13 && signal <= 18) {                iconClass = 'icon-xinhao3';            } else if (signal >= 19 && signal <= 24) {                iconClass = 'icon-xinhao4';            } else {                iconClass = 'icon-xinhao5';            }            // 离线的话图片灰色            if (online == 0) {                iconClass = iconClass + ' font-b-4'            } else {                iconClass = iconClass + ' c-green'            }            this.signalIcon = iconClass        }    };    //关键字搜索    document.onkeydown = function (ev) {        if (ev.keyCode == 13) {            ev.preventDefault();            searchByKey();        }    };    function searchByKey() {        pageIndex = 0; // 分页重置        $(".list").empty(); // 清空数据        mui('#pullrefresh').pullRefresh().refresh(true);//重置上拉加载        pullupRefresh();        // 只能放在此处,因为只有用户操作界面上的过滤条件才缓存过滤条件,如果放字 pullupRefresh 里面,会导致初始化设置空条件。。。        setCondition()    }    //设备点击    mui('body').on('tap', '.deviceRow', function () {        if ($("body").hasClass("batch-model")) {        } else {            var dataStr = $(this).closest(".deviceRow").attr("data");            var dataJSON = {devType: {}};            if (dataStr) {                dataJSON = JSON.parse(dataStr);            }            var code = dataJSON.devType.code            var url = url = 'device-details.html'            // 父节点是100263,可以扫码绑定子。直接跳走,因为只需要几个基础菜单;            if (code == 100263) {                url = 'device-details-100263.html'            }            if (code == 100274) {                // 暂时就用设备详情 ,需要扫码绑定子节点功能            }            if (code == 100287) {                url = 'device-details-100287.html'            }            url = url + '?logicalCode=' + dataJSON.logicalCode            pageJumpOper(url);        }    });    //点击信号值    mui('body').on('tap', '.editSignal', function () {        var $scope = $(this);        var deviceRow = $scope.closest(".deviceRow");        var dataStr = deviceRow.attr("data");        var dataJSON = {devType: {}};        if (dataStr) {            dataJSON = JSON.parse(dataStr);        }        var logicalCode = dataJSON.logicalCode;        sendRequest({            url: "/device/sendSignal",            type: "GET",            data: {logicalCode: logicalCode},            mask: "正在获取信号值...",            success: function (res) {                if (res.result == 1) {                    var signal = res.para;                    dataJSON.signal = signal;                    if (signal > 0) {                        dataJSON.online = 1;                    } else {                        dataJSON.online = 0;                    }                    var signalConfig = getSignalConfig(dataJSON)                    var onlineMarkDom = signalConfig.onlineMarkDom;                    var onlineSignalDom = signalConfig.onlineSignalDom;                    deviceRow.find('.online-mark').replaceWith(onlineMarkDom);                    $scope.replaceWith(onlineSignalDom);                } else {                    mui.toast(res.description);                }            }        })        return false;    });    var lastHelpDevDom = null    var lastSelectedDev = {}    mui('body').on('tap', '.offline-help', function () {        lastHelpDevDom = $(this);        var off = lastHelpDevDom.find('.offline')        var deviceRow = lastHelpDevDom.closest(".deviceRow");        var dataStr = deviceRow.attr("data");        var dataJSON = {devType: {}};        if (dataStr) {            dataJSON = JSON.parse(dataStr);        }        lastSelectedDev = dataJSON        if (off.length > 0) {            goPage('/dealer/index.html#/signal/chart?logicalCode=' + lastSelectedDev.logicalCode);            return false;        }    });    //地址选择器展示    $("#showPickerAddress").on("tap", function () {        addressPicker.show(function (rs) {            equipmentGroupId = rs[0].value;            groupName = rs[0].text;            $('#showPickerAddress .selected-text').html(rs[0].text);        });        return false;    })    //状态选择器展示    $("#showPickerStatus").on("tap", function () {        statusPicker.show(function (rs) {            isOnline = rs[0].value;            $('#showPickerStatus .selected-text').html(rs[0].text);        });        return false;    })    mui.init({        pullRefresh: {            container: '#pullrefresh',            up: {                contentrefresh: '正在加载...',                contentnomore: '',                callback: pullupRefresh            }        }    });    function getSignalConfig(obj) {        var onlineStatus = "";//离线状态文字        var onlineClass = "";//在线状态样式        var helpTip = ''        var signalStatus = "";//信号状态        var offTimeDate = obj.offTimeDate;        //如果是纯蓝牙设备,则不展示离线、在线        if (obj.channelType && obj.channelType.indexOf('BlueTooth') > -1) {            onlineStatus = "蓝牙";            onlineClass = "mark-blue iconfont icon-lanya online";//蓝牙设备永久在线            signalStatus = false;        } else {            if (obj.online == 1) {                onlineStatus = "在线";                onlineClass = "online";            } else if (obj.online == 0) {                onlineStatus = "离线";                onlineClass = "offline";                helpTip = ',<span class="c-red">点击帮助</span>'                if (offTimeDate) {                    onlineStatus = moment(offTimeDate).fromNow() + "离线";                }            }            signalStatus = true;        }        var onlineMarkDom = '<span class="offline-help padding-t-b-10"><em class="online-mark ' + onlineClass + '">' + onlineStatus + helpTip + '</em>'        onlineMarkDom = onlineMarkDom + '</span>'        _SignalOperate.setSignalIcon(obj.online, obj.signal);        var onlineSignalDom = "";        if (signalStatus) {            onlineSignalDom = ('<div class="custom-signal editSignal">' +                '<span class="signal-type">' + (obj.channelType || '') + '</span>' +                '<i class="signal-icon iconfont ' + _SignalOperate.signalIcon + '"></i><i class="iconfont icon-xinhao5 signal-icon-back"></i>' +                '</div>')        }        return {            onlineMarkDom: onlineMarkDom,            onlineSignalDom: onlineSignalDom,        }    }    /* 上拉加载具体业务实现*/    function pullupRefresh() {        var groupId = null;        pageIndex++;        var searchKey = $("#searchKey").val();        var data = {            "pageIndex": pageIndex,            "pageSize": pageSize,            "searchKey": searchKey,            "sort": $("input[name='sortName']:checked").val(),            "online": isOnline,            "equipmentGroupId": equipmentGroupId        };        sendRequest("/dealer/equipmentList?random=" + Math.random() * 1000, "GET", data, function (res) {            if (res.result == 1) {                if (pageIndex == 1) {                    total = res.para.total;                    groupCount = res.para.groupCount;                    resultList = "";                    groupId = null;                }                var length = res.para.dataList.length;                addressPickerOper.setEquipmentNumAndAddressNum(groupCount, total);                if (pageIndex == 1 && length == 0) {                    $(".mgr-bd").hide();                    $(".mgr-tip").removeClass("mui-hidden");                } else {                    $(".mgr-bd").show();                    $(".mgr-tip").addClass("mui-hidden");                }                mui('#pullrefresh').pullRefresh().endPullupToRefresh((pageIndex * pageSize >= total));                var dataTree = [];                var expandFlag = "";                for (var i = 0; i < length; i++) {                    var obj = res.para.dataList[i];                    // 只要有一台设备支持 自动退款的功能,则显示设置按钮                    if (obj.autoRefundEnable) {                        $("#setAutoRefund").removeClass('mui-hidden')                    }                    // 如果是搜索,默认展开第一组数据                    if (i == 0 && searchKey != "") {                        expandFlag = "mui-active";                    } else {                        expandFlag = "";                    }                    if (obj.groupId != groupId) {                        var cacthData = {};                        cacthData[obj.groupId] = [];                        dataTree.push(cacthData);                        // 如果改分组还没有在页面上,说明是新分组,则展示在页面上                        groupId = obj.groupId;                        if ($("#" + obj.groupId).length == 0) {                            if (obj.isManager) {                                var role = "manage";                            } else {                                var role = "limit-user";                            }                            var groupList = '<ul role="' + role + '" class="mui-table-view groupRow"><li class="mui-table-view-cell mui-collapse ' + expandFlag + '"><a class="mui-navigate-right" href="javascript:void 0;">' +                                '<div class="mui-checkbox-wear groupSelect"><div class="mui-checkbox"><input class="checkbox-btn" value="" type="checkbox"></div></div>' +                                '<span class="font-18 v-middle" id="' + obj.groupId + '">' +                                obj.name + '</span><em permission="limit-user-show" class="total-mark">合伙</em><span class="mui-pull-right group-ele-total font-12">' +                                '0台</span></a><div class="mui-collapse-content"><ul class="mui-table-view group-content">'                                + '</ul></div></li></ul>';                            $(".list").append(groupList)                        }                    }                    var workStatus = null;//工作状态文字                    var workClass = null;//工作状态样式                    // 设备工作信息: 0空闲 1工作 异常的单独走                    if (obj.status == 0) {                        workClass = "c-success";                        workStatus = "空闲";                    } else if (obj.status == 1) {                        workClass = "c-lgreen";                        workStatus = obj.statusInfo || "繁忙";                    // } else if (obj.status == 2) {                    //     workClass = "c-red";                    //     workStatus = obj.statusInfo || "故障";                    } else {                        workClass = "font-4";                        workStatus = obj.statusInfo;                    }                    //设备管理状态【人为设置的暂停使用优于一切设备的工作状态】                    if (obj.isFault == true) {                        workStatus = "暂停使用";                        workClass = "c-red";                    }                    var portInfo = ''                    // 如果有端口信息                    if (!$.isEmptyObject(obj.portStatus)) {                        var portStatus = obj.portStatus                        portInfo = '<span class="mui-col-xs-10 mui-col-sm-10 mui-text-left font-b-14-8 margin-t-5">' + portStatus.all + '个端口:';                        if (portStatus.idle) {                            portInfo = portInfo + '<span class="c-green">' + portStatus.idle + '空闲 </span>'                        }                        if (portStatus.used) {                            portInfo = portInfo + '<span class="c-lgreen">' + portStatus.used + '工作 </span>'                        }                        if (portStatus.fault) {                            portInfo = portInfo + '<span class="c-red">' + portStatus.fault + '故障 </span>'                        }                        portInfo = portInfo + '</span>'                        // 置空设备工作信息,因为有端口信息后不需要工作信息                        workStatus = '';                    }                    var signalConfig = getSignalConfig(obj);                    var onlineMarkDom = signalConfig.onlineMarkDom;                    var onlineSignalDom = signalConfig.onlineSignalDom;                    var devDataJson = JSON.stringify(obj);                    var resultList = $('<li class="mui-table-view-cell deviceRow">' +                        '<div class="mui-row">' +                        '<div class="devCheck mui-checkbox-wear"><div class="mui-checkbox"><input class="checkbox-btn" value="" type="checkbox"></div></div>' +                        '<div class=" mui-text-left">' + "<i class='c-blue iconfont v-middle " + getDevIconName(obj.type) + "'></i> <span class='v-middle'>" + obj.type + ' ' + obj.logicalCode + '</span>' + onlineMarkDom + '</div>' +                        onlineSignalDom +                        portInfo +                        '<span class="mui-col-xs-7 mui-col-sm-7 mui-text-left mui-ellipsis font-b-14-4 margin-t-5" style="min-height: 1.5em">' + wordlimit(obj.remarks, 10) +                        (obj.sevenDaysAverage!=null ? ('<div>近7日平均使用率为:<span class="c-green">'+obj.sevenDaysAverage+'%<span></div>') : "") +                        (obj.isDND ? ('<div class="c-green">勿扰模式</div>') : "") +                        '</span><div class="mui-pull-right text-right font-12">' +                        (workStatus ? ('<div class="working-status  margin-t-5 ' + workClass + '">' + workStatus + '</div>') : "") +                        (obj.deviceWarning ? ('<div class="c-red deviceWarning">' + "告警状态" + '</div>') : "") +                        (obj.simExpireDate ? ('<div class="c-red">SIM卡过期</div>') : "") +                        '</div></div>' +                        '</li>');                    resultList.attr("data", devDataJson)                    var lastElement = dataTree[dataTree.length - 1];                    lastElement[obj.groupId].push(resultList);                }                $.each(dataTree, function (i, groupDomMap) {                    //获取到该组id的dom                    for (var groupId in groupDomMap) {                        $("#" + groupId).closest("ul").find(".group-content").append(groupDomMap[groupId]);                    }                });                // 设备刷新完后刷新设备在线 总数目                setDevCount();            } else {                mui.toast(res.description);            }        });    }    // 主机故障点击    mui('body').on('tap', '.deviceWarning', function (e) {        // 阻止事件冒泡传递到设备点击事件        event.stopPropagation();        var dataStr = $(this).closest(".deviceRow").attr("data");        var dataJSON;        var url;        if (dataStr) {            dataJSON = JSON.parse(dataStr);        } else {            dataJSON = {devType: {}};        }        url = 'device-fault.html?logicalCode=' + dataJSON.logicalCode + '&type=' + dataJSON.type;        pageJumpOper(url);    });    // 翻页或是刷新信号,可能会引起设备数量的变化,所以每次都要根据dom树去找在线或离线的设备    function setDevCount() {        var g = $(".group-content");        var onlineTotal = 0;        $.each(g, function () {            var e = $(this);            var len = e.children().length;            //找到在线的数量            var onlineLength = $(this).find('.online').length;            e.parent().prev("a").find(".group-ele-total").html('<em class="c-green">' + onlineLength + '</em>/' + len + "台");            onlineTotal = onlineLength + onlineTotal        });        // 刷新总的数目        $('.equipmentNum').html('<em class="c-green">' + onlineTotal + '</em>/' + $('.deviceRow').length);    }    if (mui.os.plus) {        mui.plusReady(function () {            setTimeout(function () {                mui('#pullrefresh').pullRefresh().pullupLoading();            }, 1000);        });    } else {        mui.ready(function () {            mui('#pullrefresh').pullRefresh().pullupLoading();        });    }</script></body></html>
 |