device-mgr.html 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340
  1. <!DOCTYPE html>
  2. <!--suppress ALL -->
  3. <html>
  4. <head>
  5. <meta charset="utf-8"/>
  6. <meta name="author" content=""/>
  7. <meta name="description" content=""/>
  8. <meta name="keywords" content="扫码支付,线上投币,运营数据,物联网"/>
  9. <meta name="format-detection" content="telphone=no,email=no"/>
  10. <meta name="viewport"
  11. content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
  12. <meta http-equiv="pragma" content="no-cache">
  13. <meta http-equiv="cache-control" content="no-cache">
  14. <meta http-equiv="expires" content="0">
  15. <title>设备管理</title>
  16. <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/mui.min.css"/>
  17. <link rel="stylesheet" href="../components/custom/css/common.css"/>
  18. <link rel="stylesheet" href="css/xyf.common.min.css"/>
  19. <link rel="stylesheet" href="https://cdn.washpayer.com/components/lib/mui.picker.min.css"/>
  20. </head>
  21. <style>
  22. .nav-container {
  23. padding-bottom: 60px;
  24. position: absolute;
  25. height: 100%;
  26. width: 100%;
  27. }
  28. /*定制样式*/
  29. .mgr-bd {
  30. transition: .25s all ease-in-out;
  31. height: calc(100% - 80px - 50px);
  32. margin-top: 80px;
  33. }
  34. .mui-icon.mui-icon-clear {
  35. right: 0;
  36. }
  37. .or-order-status .mui-radio input {
  38. position: relative;
  39. right: auto;
  40. top: 2px;
  41. }
  42. #pullrefresh .mui-scroll {
  43. top: 1px;
  44. }
  45. .device-mgr .c-handle-panel {
  46. bottom: 50px;
  47. }
  48. .hide_device_working_status .working-status {
  49. display: none;
  50. }
  51. /*由于批量设置的按钮可能存在多行,得多留点底部空间*/
  52. .list {
  53. padding-bottom: 40px;
  54. }
  55. </style>
  56. <body class="device-mgr">
  57. <div class="nav-container">
  58. <div class="mui-input-group mui-reset">
  59. <form class="mui-row" action="">
  60. <div class="mui-col-xs-7 mui-col-sm-7">
  61. <div class="mui-input-row mui-search">
  62. <input type="search" class="mui-input-clear" id="searchKey" placeholder="设备编号/投放地址">
  63. </div>
  64. </div>
  65. <div class="mui-col-xs-5 mui-col-sm-5 mui-text-right">
  66. <div class="filter-btn"><span>筛选</span><i class="iconfont icon-triangle-up"></i></div>
  67. <div class="in-row-btn" onclick="batchOper()">多选<i class="iconfont icon-triangle-up"></i></div>
  68. </div>
  69. </form>
  70. </div>
  71. <div class="filter-panel" style="display: none" id="options">
  72. <div class="input-group-vertical mui-table-view clear-b-border">
  73. <div class="or-border-fir mui-input-row input-clear or-order-status" id="showPickerAddress">
  74. <label class="or-label-text">地址</label>
  75. <span class="mui-icon mui-icon-arrowright"></span>
  76. <span class="or-order-status-font or-longWrap selected-text or-ellipsis">全部</span>
  77. </div>
  78. <div class="or-border-fir mui-input-row input-clear or-order-status" id="showPickerStatus">
  79. <label class="or-label-text">状态</label>
  80. <span class="mui-icon mui-icon-arrowright"></span>
  81. <span class="or-order-status-font or-longWrap selected-text or-ellipsis">全部</span>
  82. </div>
  83. <div class="or-border-fir mui-input-row input-clear or-order-status">
  84. <label class="or-label-text">排序<span></span></label>
  85. <div class="mui-row or-order-status-font">
  86. <div class="mui-radio mui-col-xs-4 mui-col-sm-4">
  87. <input class="" value="logicalCode" type="radio" name="sortName" checked>
  88. <span class="font-14">编号</span>
  89. </div>
  90. <div class="mui-radio mui-col-xs-4 mui-col-sm-4">
  91. <input class="" value="devType" type="radio" name="sortName">
  92. <span class="font-14">类型</span>
  93. </div>
  94. <div class="mui-radio mui-col-xs-4 mui-col-sm-4">
  95. <input class="" value="tag" type="radio" name="sortName">
  96. <span class="font-14">标签</span>
  97. </div>
  98. <div class="mui-radio mui-col-xs-4 mui-col-sm-4">
  99. <input class="" value="remarks" type="radio" name="sortName">
  100. <span class="font-14">备注</span>
  101. </div>
  102. </div>
  103. </div>
  104. <div class="mui-input-row filter-panel-btn flexbox">
  105. <span class="cancel-btn flex">取消</span>
  106. <span class="ok-btn flex">确定</span>
  107. </div>
  108. </div>
  109. </div>
  110. <h5 class="dev-top-info flexbox">
  111. <div class="flex"><span class="putOnAddress">0</span>个地址,<span class="equipmentNum">0</span>台设备</div>
  112. <span class="text-right handle-reg c-blue" onclick="goReg()">手动注册</span>
  113. </h5>
  114. <div id="pullrefresh" class="mui-content mui-clearfix mui-scroll-wrapper mgr-bd">
  115. <!-- 设备列表 -->
  116. <div class="mui-scroll">
  117. <div class="list"></div>
  118. </div>
  119. </div>
  120. <div class="mgr-tip mui-hidden"></div>
  121. <div class="c-handle-panel mui-hidden">
  122. <div class="handle-btn">
  123. <div class="mui-checkbox ">
  124. <input id="checkbox-all" class="checkbox-all" type="checkbox">
  125. <label for="checkbox-all">全选</label>
  126. </div>
  127. </div>
  128. <div class="handle-btn-list mui-text-right by-dev">
  129. <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchSettingParams"
  130. onclick="editParams()">设备参数
  131. </button>
  132. <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchSettingServerParams"
  133. onclick="editServerParams()">服务器参数
  134. </button>
  135. <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary " onclick="editDesc()">说明
  136. </button>
  137. <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary " onclick="editPackage()">套餐
  138. </button>
  139. <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger mui-hidden" id="editTempPackage"
  140. onclick="editTempPackage()">临时套餐
  141. </button>
  142. <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger mui-hidden" id="setAutoRefund"
  143. onclick="setAutoRefund()">自动退款
  144. </button>
  145. <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger "
  146. onclick="setBatchDevsSwitch()">禁用
  147. </button>
  148. <button type="button" class="mui-btn mui-btn-outlined mui-btn-danger "
  149. onclick="setDND()">勿扰
  150. </button>
  151. </div>
  152. <div class="handle-btn-list mui-text-right by-group">
  153. <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchGroupSettingParams"
  154. onclick="editParams()">设备参数
  155. </button>
  156. <button type="button" class="mui-btn mui-btn-outlined mui-btn-primary mui-hidden batchGroupSettingServerParams"
  157. onclick="editServerParams()">服务器参数
  158. </button>
  159. </div>
  160. </div>
  161. <!--使用说明-->
  162. <div class="instructionsDialog edit-back mui-hidden">
  163. <div class="edit-content">
  164. <div class="edit-box">
  165. <div class="reg-des">
  166. <label>使用说明</label>
  167. <textarea id="instructionsContent" maxlength="100" rows="3" placeholder=""></textarea>
  168. </div>
  169. </div>
  170. <div class="mui-popup-buttons">
  171. <span class="mui-popup-button">取消</span>
  172. <span class="mui-popup-button mui-popup-button-bold">保存</span>
  173. </div>
  174. </div>
  175. </div>
  176. <!--多选模式,支持直接多选地址-->
  177. <div id="batchMenu" class="mui-popover mui-popover-action mui-popover-bottom">
  178. <ul class="mui-table-view">
  179. <li class="mui-table-view-cell batch-dev">
  180. 设备多选
  181. </li>
  182. <li class="mui-table-view-cell batch-group">
  183. 地址多选
  184. </li>
  185. </ul>
  186. <ul class="mui-table-view">
  187. <li class="mui-table-view-cell batch-cancel">
  188. 取消多选
  189. </li>
  190. </ul>
  191. </div>
  192. </div>
  193. <script src="https://cdn.washpayer.com/components/lib/jquery.min.js?v=1"></script>
  194. <script src="https://cdn.washpayer.com/components/lib/mui.min.js"></script>
  195. <script src="https://cdn.washpayer.com/components/lib/mui.picker.min.js"></script>
  196. <script src="https://cdn.washpayer.com/components/lib/moment.min.js"></script>
  197. <script src="../components/lib/moment.zh.js"></script>
  198. <script src="/components/custom/js/common.js"></script>
  199. <script src="js/xyf.common.js"></script>
  200. <script src="js/device-features.js"></script>
  201. <script>
  202. window.initDealerNav && initDealerNav('device_management'); // initDealerNav内有获取当前账号菜单权限
  203. var statusEnum = [{value: null, text: '全部状态'},
  204. {value: '1', text: '在线'},
  205. {value: '0', text: '离线'},]
  206. //设备地址 选择器
  207. var statusPicker = new mui.PopPicker({
  208. layer: 1
  209. });
  210. statusPicker.setData(statusEnum);
  211. //设备地址 选择器
  212. var addressPicker = new mui.PopPicker({
  213. layer: 1
  214. });
  215. var condition = {};
  216. var pageType = 'deviceMgr';
  217. var pageIndex = 0;
  218. var pageSize = 20;
  219. var total = 0;
  220. var groupCount = 0;
  221. var isOnline = "";
  222. var equipmentGroupId = "";
  223. var groupName = "";
  224. var setCondition = function () {
  225. var data = {
  226. searchKey: $("#searchKey").val(),
  227. equipmentGroupId: equipmentGroupId,
  228. groupName: groupName,
  229. isOnline: isOnline,
  230. sortName: $("input[name='sortName']:checked").val(),
  231. };
  232. var conArr = localStorage.condition ? JSON.parse(localStorage.condition) : {};
  233. conArr[pageType] = data;
  234. localStorage.condition = JSON.stringify(conArr);
  235. };
  236. //如果调到子页面,返回后还是保留查询条件
  237. var orRecordBack = getQueryString('orRecord');
  238. if (orRecordBack) {
  239. history.replaceState(null, null, "device-mgr.html");//清除orRecord
  240. condition = localStorage.condition ? JSON.parse(localStorage.condition)[pageType] : {};
  241. if (condition.searchKey) {
  242. $("#searchKey").val(condition.searchKey);
  243. }
  244. if (condition.isOnline != null) {
  245. isOnline = condition.isOnline
  246. for (var index in statusEnum) {
  247. if (statusEnum[index].value == condition.isOnline) {
  248. statusPicker.pickers[0].setSelectedValue(statusEnum[index].value);
  249. $('#showPickerStatus .selected-text').html(statusEnum[index].text);
  250. }
  251. }
  252. }
  253. if (condition.equipmentGroupId) {
  254. equipmentGroupId = condition.equipmentGroupId
  255. groupName = condition.groupName
  256. }
  257. if (condition.sortName) {
  258. $("[value='" + condition.sortName + "']")[0].checked = true;
  259. }
  260. } else {
  261. // 如果是刷新进来该页面,则清空掉条件缓存
  262. setCondition()
  263. }
  264. var addressPickerOper = {
  265. getEquipmentNumAndAdressList: function (callback) {
  266. var $scope = this;
  267. sendRequest('/device/getEquipmentNumAndAddressList', 'post', {}, function (res) {
  268. if (res.result == 1) {
  269. var pickerDatas = []
  270. pickerDatas.push({
  271. value: null,
  272. text: '全部投放地址',
  273. });
  274. var datas = res.para.groups
  275. for (var i = 0, length = datas.length; i < length; i++) {
  276. var item = {
  277. value: datas[i].groupId,
  278. text: datas[i].name,
  279. };
  280. pickerDatas.push(item);
  281. }
  282. addressPicker.setData(pickerDatas);
  283. if (callback) {
  284. callback()
  285. }
  286. } else {
  287. mui.toast(res.description);
  288. }
  289. })
  290. },
  291. setEquipmentNumAndAddressNum: function (AddressNum, equipmentNum) {
  292. $('.putOnAddress').text(AddressNum);
  293. $('.equipmentNum').text(equipmentNum);
  294. },
  295. };
  296. // 需要等待地址加载出来,然后才初始化所有的参数
  297. addressPickerOper.getEquipmentNumAndAdressList(function () {
  298. if (equipmentGroupId) {
  299. addressPicker.pickers[0].setSelectedValue(equipmentGroupId);
  300. $('#showPickerAddress .selected-text').html(groupName);
  301. }
  302. });
  303. var FeatureMap = {}
  304. var groupBatchFeature = ['batchGroupSettingParams', 'batchGroupSettingServerParams']
  305. var queryFeature = ['hide_device_working_status', 'batchSettingParams', 'batchSettingServerParams',].concat(groupBatchFeature)
  306. getFeatureList("dealer", {list: queryFeature}, function (payload) {
  307. FeatureMap = payload;
  308. // 隐藏工作状态的特性
  309. if (payload.hide_device_working_status) {
  310. $('body').addClass('hide_device_working_status')
  311. }
  312. // 批量设置参数的特性
  313. if (payload.batchSettingParams) {
  314. $(".batchSettingParams").removeClass("mui-hidden")
  315. }
  316. // 批量设置参数的特性
  317. if (payload.batchSettingServerParams) {
  318. $(".batchSettingServerParams").removeClass("mui-hidden")
  319. }
  320. if (payload.batchGroupSettingParams) {
  321. $(".batchGroupSettingParams").removeClass("mui-hidden")
  322. }
  323. if (payload.batchGroupSettingServerParams) {
  324. $(".batchGroupSettingServerParams").removeClass("mui-hidden")
  325. }
  326. });
  327. sendRequest("/dealer/accountInfo", "GET", null, function (response) {
  328. if (response.result == 1) {
  329. var payload = response.payload
  330. // 临时套餐
  331. if (payload.hasTempPackage) {
  332. $("#editTempPackage").removeClass("mui-hidden")
  333. }
  334. } else {
  335. mui.toast(response.description);
  336. }
  337. });
  338. FilterComponent({
  339. ok: function () {
  340. /*合法性验证*/
  341. pageIndex = 0;
  342. searchByKey()
  343. }
  344. });
  345. //全选
  346. $("#checkbox-all").on("change", function () {
  347. if ($(this).is(":checked")) {
  348. $(".checkbox-btn").prop("checked", true);
  349. } else {
  350. $(".checkbox-btn").prop("checked", false);
  351. }
  352. });
  353. //复选框事件重写
  354. $("#pullrefresh").on("tap", ".mui-checkbox-wear", function (evt) {
  355. var box = $(this).find(".mui-checkbox input");
  356. if (box.is(":checked")) {
  357. box.prop("checked", false);
  358. } else {
  359. box.prop("checked", true);
  360. }
  361. evt.stopPropagation();
  362. evt.preventDefault();
  363. }).on("tap", ".groupSelect", function () {
  364. //组全选:该事件必须在上个事件之后
  365. var input = $(this).find("input");
  366. var checked = input.is(":checked");
  367. var groupDom = $(this).closest("li").find(".group-content");
  368. if (checked) {
  369. groupDom.find(".checkbox-btn").prop("checked", true);
  370. } else {
  371. groupDom.find(".checkbox-btn").prop("checked", false);
  372. }
  373. });
  374. // 页面跳转前标记说明:要缓存过滤条件
  375. function pageJumpOper(url) {
  376. history.replaceState(null, null, "device-mgr.html?orRecord=true&t=" + new Date().getTime());//再次返回该页面会带上orRecord
  377. goPage(url);
  378. }
  379. //去手动注册
  380. function goReg() {
  381. var url = "/dealer/index.html#/deviceReg?handle=true";
  382. pageJumpOper(url);
  383. }
  384. mui('#batchMenu').on('tap', 'li', function () {
  385. if ($(this).hasClass('batch-dev')) {
  386. batchOperByDev()
  387. } else if ($(this).hasClass('batch-group')) {
  388. batchOperByGroup()
  389. } else if ($(this).hasClass('batch-cancel')) {
  390. batchOperCancel()
  391. }
  392. mui('#batchMenu').popover('toggle');
  393. });
  394. //激活批量操作
  395. function batchOper() {
  396. // 默认为设备多选,如果配置了地址批量选择,则多一个地址批量选择的选项
  397. var flag = false
  398. $(groupBatchFeature).each(function (index, item) {
  399. if (FeatureMap[item]) {
  400. flag = true
  401. }
  402. })
  403. if (flag) {
  404. mui('#batchMenu').popover('toggle');
  405. return
  406. }
  407. batchOperJustDev();
  408. }
  409. function batchOperJustDev() {
  410. if ($("body").hasClass("batch-model")) {
  411. batchOperCancel();
  412. } else {
  413. batchOperActive();
  414. }
  415. }
  416. function batchOperByDev() {
  417. $("body").removeClass("batch-model-group");
  418. batchOperActive();
  419. }
  420. function batchOperByGroup() {
  421. $("body").addClass("batch-model-group");
  422. batchOperActive();
  423. }
  424. function batchOperActive() {
  425. $(".in-row-btn").addClass('active');
  426. $("body").addClass("batch-model");
  427. $(".c-handle-panel").removeClass('mui-hidden')
  428. }
  429. function batchOperCancel() {
  430. $(".in-row-btn").removeClass('active');
  431. $("body").removeClass("batch-model");
  432. $(".c-handle-panel").addClass('mui-hidden')
  433. }
  434. // 批量参数设置:主要是发到设备测的参数
  435. function editParams() {
  436. var isGroupModel = $('body').hasClass('batch-model-group')
  437. var idInfo = getSelectIdInfo(true);
  438. var type = "";
  439. var code = null;
  440. var logicalCodeList = [];
  441. if (!idInfo || idInfo.idList.length == 0) {
  442. if (isGroupModel) {
  443. mui.toast("请选择设备组。");
  444. } else {
  445. mui.toast("请确保选中的都是同类设备,请重新选择。");
  446. }
  447. return;
  448. } else {
  449. type = idInfo.type;
  450. code = idInfo.code;
  451. logicalCodeList = idInfo.logicalCodeList;
  452. }
  453. // 判断要去哪个参数设置的页面
  454. var devFeatures = getDeviceFeatures({code: code});
  455. var url = devFeatures.param;
  456. if (isGroupModel) {
  457. if (url) {
  458. var url = url + "?groupId=" + JSON.stringify(idInfo.idList) + "&code=" + code + "&type=" + type
  459. pageJumpOper(url)
  460. } else {
  461. mui.alert('该设备无法进行参数配置', '提示', '确定');
  462. }
  463. return;
  464. }
  465. if (url) {
  466. var url = url + "?logicalCode=" + JSON.stringify(logicalCodeList) + "&code=" + code + "&type=" + type
  467. pageJumpOper(url)
  468. } else {
  469. mui.alert('该设备无法进行参数配置', '提示', '确定');
  470. }
  471. }
  472. // 服务器参数,不用远程发命令给设备(后续服务器参数都单独的提取出来,和设备测的参数分开)
  473. function editServerParams() {
  474. var isGroupModel = $('body').hasClass('batch-model-group')
  475. var idInfo = getSelectIdInfo(true);
  476. var type = "";
  477. var code = null;
  478. var logicalCodeList = [];
  479. if (!idInfo || idInfo.idList.length == 0) {
  480. if (isGroupModel) {
  481. mui.toast("请选择设备组。");
  482. } else {
  483. mui.toast("请确保选中的都是同类设备,请重新选择。");
  484. }
  485. return;
  486. } else {
  487. type = idInfo.type;
  488. code = idInfo.code;
  489. logicalCodeList = idInfo.logicalCodeList;
  490. }
  491. // 判断要去哪个参数设置的页面
  492. var devFeatures = getDeviceFeatures({code: code});
  493. var url = devFeatures.serverParam;
  494. if (isGroupModel) {
  495. if (url) {
  496. var url = url + "?groupId=" + JSON.stringify(idInfo.idList) + "&code=" + code + "&type=" + type
  497. pageJumpOper(url)
  498. } else {
  499. mui.alert('此设备无服务器参数特性', '提示', '确定');
  500. }
  501. return;
  502. }
  503. if (url) {
  504. var url = url + "?logicalCode=" + JSON.stringify(logicalCodeList) + "&code=" + code + "&type=" + type
  505. pageJumpOper(url)
  506. } else {
  507. mui.alert('此设备无服务器参数特性', '提示', '确定');
  508. }
  509. }
  510. //批量编辑使用说明
  511. function editDesc() {
  512. var idInfo = getSelectIdInfo(true);
  513. var idList = [];
  514. if (!idInfo) {
  515. mui.toast("请确保选中的都是同类设备,请重新选择。");
  516. return;
  517. }
  518. if (idInfo.idList.length == 0) {
  519. mui.toast("请您选择设备。");
  520. return;
  521. } else {
  522. idList = idInfo.idList;
  523. }
  524. $('.instructionsDialog').removeClass('mui-hidden');
  525. $('body').on('touchmove', function (e) {
  526. e.preventDefault();
  527. });
  528. var data = {"typeId": idInfo.typeId};
  529. var url = "/device/getInstructionsByType";
  530. sendRequest(url, "GET", data, function (res) {
  531. if (res.result == 1) {
  532. //使用说明
  533. if (res.para) {
  534. $('#instructionsContent').val(res.para);
  535. $('#instructionsContent').prop("placeholder", res.para);
  536. }
  537. }
  538. });
  539. $('.instructionsDialog .mui-popup-buttons span').off().tap(function () {
  540. if ($(this).index() == 0) {
  541. //点击取消
  542. $('.instructionsDialog').addClass('mui-hidden');
  543. $('body').off('touchmove');
  544. } else {
  545. //点击保存
  546. var instructionsText = $('#instructionsContent').val();
  547. if ($.isEmptyObject(instructionsText)) {
  548. return;
  549. }
  550. var data = {"value": idList, "instructions": instructionsText};
  551. var url = "/device/updateEquipmentInstructions";
  552. sendRequest(url, "POST", data, function (res) {
  553. if (res.result == 1) {
  554. $('.instructionsDialog').addClass('mui-hidden');
  555. mui.toast("保存成功");
  556. $('body').off('touchmove');
  557. } else {
  558. mui.toast(res.description);
  559. }
  560. }, "json");
  561. }
  562. return false;
  563. });
  564. }
  565. //批量编辑套餐
  566. function editPackage() {
  567. var idInfo = getSelectIdInfo(true);
  568. var typeId = null;
  569. var type = "";
  570. var code = null;
  571. var unit = '分钟';
  572. var logicalCodeList = [];
  573. if (!idInfo) {
  574. mui.toast("请确保选中的都是同类设备,请重新选择。");
  575. return;
  576. } else {
  577. if (idInfo.code == 110000 || idInfo.code == 111000) {
  578. mui.toast("售货柜不用设置套餐");
  579. return;
  580. }
  581. typeId = idInfo.typeId;
  582. type = idInfo.type;
  583. code = idInfo.code;
  584. unit = idInfo.unit;
  585. logicalCodeList = idInfo.logicalCodeList;
  586. }
  587. if (idInfo.idList.length == 0) {
  588. mui.toast("请您选择设备。");
  589. return;
  590. }
  591. var url = "/dealer/index.html#/packageSettingsBatch?logicalCode=" + JSON.stringify(logicalCodeList) + "&unit=" + unit + "&code=" + code + "&type=" + type + "&typeId=" + typeId;
  592. pageJumpOper(url)
  593. }
  594. //批量编辑临时套餐
  595. function editTempPackage() {
  596. var idInfo = getSelectIdInfo(true);
  597. var typeId = null;
  598. var type = "";
  599. var code = null;
  600. var unit = '分钟';
  601. var logicalCodeList = [];
  602. if (!idInfo) {
  603. mui.toast("请确保选中的都是同类设备,请重新选择。");
  604. return;
  605. } else {
  606. if (idInfo.code == 110000 || idInfo.code == 111000) {
  607. mui.toast("售货柜不用设置套餐");
  608. return;
  609. }
  610. typeId = idInfo.typeId;
  611. type = idInfo.type;
  612. code = idInfo.code;
  613. unit = idInfo.unit;
  614. logicalCodeList = idInfo.logicalCodeList;
  615. }
  616. if (idInfo.idList.length == 0) {
  617. mui.toast("请您选择设备。");
  618. return;
  619. }
  620. var url = "/dealer/index.html#/tempPackageSettingsBatch?logicalCode=" + JSON.stringify(logicalCodeList) + "&unit=" + unit + "&code=" + code + "&type=" + type + "&typeId=" + typeId;
  621. pageJumpOper(url)
  622. }
  623. //批量禁用
  624. function setBatchDevsSwitch() {
  625. var idInfo = getSelectIdInfo();
  626. var idList = [];
  627. if (idInfo.idList.length == 0) {
  628. mui.toast("请您选择设备。");
  629. return;
  630. } else {
  631. idList = idInfo.idList;
  632. }
  633. var btnArray = ['<span class="c-red noClick">禁用</span>', '<span class="c-green noClick">启用</span>', '取消'];
  634. mui.confirm("停用或启用这些设备", '设置', btnArray, function (e) {
  635. if (e.index == 0 || e.index == 1) {
  636. sendRequest({
  637. url: "/dealer/setBatchDevsSwitch",
  638. type: "POST",
  639. data: {
  640. logicalCodes: idList,
  641. isFault: e.index == 0
  642. },
  643. contentType: "json",
  644. success: function (res) {
  645. if (res.result == 1) {
  646. mui.toast("禁用成功!");
  647. setTimeout(function () {
  648. location.reload();
  649. }, 1200);
  650. } else {
  651. mui.toast(res.description);
  652. }
  653. }
  654. });
  655. }
  656. });
  657. }
  658. // 去设置勿扰模式
  659. function setDND() {
  660. var idInfo = getSelectIdInfo();
  661. var idList = [];
  662. if (idInfo.logicalCodeList.length == 0) {
  663. mui.toast("请您选择设备。");
  664. return;
  665. } else {
  666. idList = idInfo.logicalCodeList;
  667. }
  668. localStorage.setItem('dnd_config', JSON.stringify({
  669. isDND: true,
  670. logicalCodes: idList
  671. }))
  672. goPage('/dealer/index.html#/device/switch/dnd')
  673. }
  674. // 某些设备支持自动退款
  675. function setAutoRefund() {
  676. var idInfo = getSelectIdInfo();
  677. var idList = [];
  678. if (idInfo.idList.length == 0) {
  679. mui.toast("请您选择设备。");
  680. return;
  681. } else {
  682. idList = idInfo.idList;
  683. }
  684. var btnArray = ['<span class="c-red noClick">关</span>', '<span class="c-green noClick">开</span>', '取消'];
  685. mui.confirm("自动退款功能开关", '设置', btnArray, function (e) {
  686. if (e.index == 0 || e.index == 1) {
  687. sendRequest({
  688. url: "/device/setDevAutoRefund",
  689. type: "POST",
  690. data: {
  691. logicalCodes: idList,
  692. autoRefund: e.index,
  693. },
  694. contentType: "json",
  695. success: function (res) {
  696. if (res.result == 1) {
  697. mui.toast(res.description);
  698. } else {
  699. mui.toast(res.description);
  700. }
  701. }
  702. });
  703. }
  704. });
  705. }
  706. //获取被选中设备的ID,并检测选中的设备是否同类型,todo待后台鉴权管理员才能修改后,前台不带入合伙设备ID
  707. function getSelectIdInfo(sameTypeFlag) {
  708. var idList = [];
  709. var logicalCodeList = [];
  710. var typeId = null;
  711. var type = "";
  712. var code = null;
  713. var typeSame = true;//检测是否同设备类型
  714. var unit;
  715. // 地址批量选择模式
  716. if ($('body').hasClass('batch-model-group')) {
  717. $("[role='manage'] .groupSelect").each(function () {
  718. var checked = $(this).find("input").is(":checked");
  719. if (checked) {
  720. if ($(this).next()) {
  721. idList.push($(this).next().attr('id'))
  722. }
  723. }
  724. var dataStr = $(this).closest("li").find('.deviceRow:eq(0)').attr("data");
  725. var dataJSON = {devType: {}};
  726. if (dataStr) {
  727. dataJSON = JSON.parse(dataStr);
  728. type = dataJSON.type;
  729. code = dataJSON.devType.code; // 默认取最后一组的第一个code作为参数入口,暂时先就这样
  730. }
  731. });
  732. if (idList.length) {
  733. return {
  734. idList: idList,
  735. code: code,
  736. type: type,
  737. }
  738. }
  739. return null
  740. }
  741. // 只遍历管理员下的设备
  742. $("[role='manage'] .devCheck").each(function () {
  743. var checked = $(this).find("input").is(":checked");
  744. if (checked) {
  745. var dataStr = $(this).closest(".deviceRow").attr("data");
  746. var dataJSON = {devType: {}};
  747. if (dataStr) {
  748. dataJSON = JSON.parse(dataStr);
  749. }
  750. var role = $(this).closest(".groupRow").attr("role");
  751. var id = dataJSON.id;
  752. var logicalCode = dataJSON.logicalCode;
  753. var getTypeId = dataJSON.typeId;
  754. var getType = dataJSON.type;
  755. var getCode = dataJSON.devType.code;
  756. var timeBased = dataJSON.timeBased;
  757. //判断设备类型是否相同,合伙人设备不判断
  758. if (role != "limit-user" && typeId != null && getTypeId != typeId && sameTypeFlag) {
  759. typeSame = false;
  760. return false;//结束循环
  761. } else {
  762. typeId = getTypeId;
  763. code = getCode;
  764. type = getType;
  765. if (unit == null) {
  766. unit = dataJSON.unit;
  767. if (unit && unit != "null" && unit != "undefined") {
  768. } else {
  769. // 如果没有单位,则根据timeBased得到单位
  770. unit = (timeBased == true ? "分钟" : "次");
  771. }
  772. }
  773. }
  774. //判断是否是合伙人设备,合伙人设备不记录
  775. if (role == "limit-user") {
  776. return;//继续循环
  777. }
  778. if (id) {
  779. idList.push(id);
  780. }
  781. if (logicalCode) {
  782. logicalCodeList.push(logicalCode);
  783. }
  784. }
  785. });
  786. if (!typeSame) {
  787. return null;
  788. } else {
  789. return {
  790. idList: idList,
  791. logicalCodeList: logicalCodeList,
  792. typeId: typeId,
  793. unit: unit,
  794. code: code,
  795. type: type
  796. };
  797. }
  798. }
  799. /**
  800. * 信号操作
  801. */
  802. var _SignalOperate = {
  803. signalIcon: '',
  804. setSignalIcon: function (online, signal) {
  805. var iconClass = '';
  806. if (signal == 0) {
  807. iconClass = '';
  808. } else if (signal > 0 && signal <= 6) {
  809. iconClass = 'icon-xinhao1';
  810. } else if (signal >= 7 && signal <= 12) {
  811. iconClass = 'icon-xinhao2';
  812. } else if (signal >= 13 && signal <= 18) {
  813. iconClass = 'icon-xinhao3';
  814. } else if (signal >= 19 && signal <= 24) {
  815. iconClass = 'icon-xinhao4';
  816. } else {
  817. iconClass = 'icon-xinhao5';
  818. }
  819. // 离线的话图片灰色
  820. if (online == 0) {
  821. iconClass = iconClass + ' font-b-4'
  822. } else {
  823. iconClass = iconClass + ' c-green'
  824. }
  825. this.signalIcon = iconClass
  826. }
  827. };
  828. //关键字搜索
  829. document.onkeydown = function (ev) {
  830. if (ev.keyCode == 13) {
  831. ev.preventDefault();
  832. searchByKey();
  833. }
  834. };
  835. function searchByKey() {
  836. pageIndex = 0; // 分页重置
  837. $(".list").empty(); // 清空数据
  838. mui('#pullrefresh').pullRefresh().refresh(true);//重置上拉加载
  839. pullupRefresh();
  840. // 只能放在此处,因为只有用户操作界面上的过滤条件才缓存过滤条件,如果放字 pullupRefresh 里面,会导致初始化设置空条件。。。
  841. setCondition()
  842. }
  843. //设备点击
  844. mui('body').on('tap', '.deviceRow', function () {
  845. if ($("body").hasClass("batch-model")) {
  846. } else {
  847. var dataStr = $(this).closest(".deviceRow").attr("data");
  848. var dataJSON = {devType: {}};
  849. if (dataStr) {
  850. dataJSON = JSON.parse(dataStr);
  851. }
  852. var code = dataJSON.devType.code
  853. var url = url = 'device-details.html'
  854. // 父节点是100263,可以扫码绑定子。直接跳走,因为只需要几个基础菜单;
  855. if (code == 100263) {
  856. url = 'device-details-100263.html'
  857. }
  858. if (code == 100274) {
  859. // 暂时就用设备详情 ,需要扫码绑定子节点功能
  860. }
  861. if (code == 100287) {
  862. url = 'device-details-100287.html'
  863. }
  864. url = url + '?logicalCode=' + dataJSON.logicalCode
  865. pageJumpOper(url);
  866. }
  867. });
  868. //点击信号值
  869. mui('body').on('tap', '.editSignal', function () {
  870. var $scope = $(this);
  871. var deviceRow = $scope.closest(".deviceRow");
  872. var dataStr = deviceRow.attr("data");
  873. var dataJSON = {devType: {}};
  874. if (dataStr) {
  875. dataJSON = JSON.parse(dataStr);
  876. }
  877. var logicalCode = dataJSON.logicalCode;
  878. sendRequest({
  879. url: "/device/sendSignal",
  880. type: "GET",
  881. data: {logicalCode: logicalCode},
  882. mask: "正在获取信号值...",
  883. success: function (res) {
  884. if (res.result == 1) {
  885. var signal = res.para;
  886. dataJSON.signal = signal;
  887. if (signal > 0) {
  888. dataJSON.online = 1;
  889. } else {
  890. dataJSON.online = 0;
  891. }
  892. var signalConfig = getSignalConfig(dataJSON)
  893. var onlineMarkDom = signalConfig.onlineMarkDom;
  894. var onlineSignalDom = signalConfig.onlineSignalDom;
  895. deviceRow.find('.online-mark').replaceWith(onlineMarkDom);
  896. $scope.replaceWith(onlineSignalDom);
  897. } else {
  898. mui.toast(res.description);
  899. }
  900. }
  901. })
  902. return false;
  903. });
  904. var lastHelpDevDom = null
  905. var lastSelectedDev = {}
  906. mui('body').on('tap', '.offline-help', function () {
  907. lastHelpDevDom = $(this);
  908. var off = lastHelpDevDom.find('.offline')
  909. var deviceRow = lastHelpDevDom.closest(".deviceRow");
  910. var dataStr = deviceRow.attr("data");
  911. var dataJSON = {devType: {}};
  912. if (dataStr) {
  913. dataJSON = JSON.parse(dataStr);
  914. }
  915. lastSelectedDev = dataJSON
  916. if (off.length > 0) {
  917. goPage('/dealer/index.html#/signal/chart?logicalCode=' + lastSelectedDev.logicalCode);
  918. return false;
  919. }
  920. });
  921. //地址选择器展示
  922. $("#showPickerAddress").on("tap", function () {
  923. addressPicker.show(function (rs) {
  924. equipmentGroupId = rs[0].value;
  925. groupName = rs[0].text;
  926. $('#showPickerAddress .selected-text').html(rs[0].text);
  927. });
  928. return false;
  929. })
  930. //状态选择器展示
  931. $("#showPickerStatus").on("tap", function () {
  932. statusPicker.show(function (rs) {
  933. isOnline = rs[0].value;
  934. $('#showPickerStatus .selected-text').html(rs[0].text);
  935. });
  936. return false;
  937. })
  938. mui.init({
  939. pullRefresh: {
  940. container: '#pullrefresh',
  941. up: {
  942. contentrefresh: '正在加载...',
  943. contentnomore: '',
  944. callback: pullupRefresh
  945. }
  946. }
  947. });
  948. function getSignalConfig(obj) {
  949. var onlineStatus = "";//离线状态文字
  950. var onlineClass = "";//在线状态样式
  951. var helpTip = ''
  952. var signalStatus = "";//信号状态
  953. var offTimeDate = obj.offTimeDate;
  954. //如果是纯蓝牙设备,则不展示离线、在线
  955. if (obj.channelType && obj.channelType.indexOf('BlueTooth') > -1) {
  956. onlineStatus = "蓝牙";
  957. onlineClass = "mark-blue iconfont icon-lanya online";//蓝牙设备永久在线
  958. signalStatus = false;
  959. } else {
  960. if (obj.online == 1) {
  961. onlineStatus = "在线";
  962. onlineClass = "online";
  963. } else if (obj.online == 0) {
  964. onlineStatus = "离线";
  965. onlineClass = "offline";
  966. helpTip = ',<span class="c-red">点击帮助</span>'
  967. if (offTimeDate) {
  968. onlineStatus = moment(offTimeDate).fromNow() + "离线";
  969. }
  970. }
  971. signalStatus = true;
  972. }
  973. var onlineMarkDom = '<span class="offline-help padding-t-b-10"><em class="online-mark ' + onlineClass + '">' + onlineStatus + helpTip + '</em>'
  974. onlineMarkDom = onlineMarkDom + '</span>'
  975. _SignalOperate.setSignalIcon(obj.online, obj.signal);
  976. var onlineSignalDom = "";
  977. if (signalStatus) {
  978. onlineSignalDom = ('<div class="custom-signal editSignal">' +
  979. '<span class="signal-type">' + (obj.channelType || '') + '</span>' +
  980. '<i class="signal-icon iconfont ' + _SignalOperate.signalIcon + '"></i><i class="iconfont icon-xinhao5 signal-icon-back"></i>' +
  981. '</div>')
  982. }
  983. return {
  984. onlineMarkDom: onlineMarkDom,
  985. onlineSignalDom: onlineSignalDom,
  986. }
  987. }
  988. /* 上拉加载具体业务实现*/
  989. function pullupRefresh() {
  990. var groupId = null;
  991. pageIndex++;
  992. var searchKey = $("#searchKey").val();
  993. var data = {
  994. "pageIndex": pageIndex,
  995. "pageSize": pageSize,
  996. "searchKey": searchKey,
  997. "sort": $("input[name='sortName']:checked").val(),
  998. "online": isOnline,
  999. "equipmentGroupId": equipmentGroupId
  1000. };
  1001. sendRequest("/dealer/equipmentList?random=" + Math.random() * 1000, "GET", data, function (res) {
  1002. if (res.result == 1) {
  1003. if (pageIndex == 1) {
  1004. total = res.para.total;
  1005. groupCount = res.para.groupCount;
  1006. resultList = "";
  1007. groupId = null;
  1008. }
  1009. var length = res.para.dataList.length;
  1010. addressPickerOper.setEquipmentNumAndAddressNum(groupCount, total);
  1011. if (pageIndex == 1 && length == 0) {
  1012. $(".mgr-bd").hide();
  1013. $(".mgr-tip").removeClass("mui-hidden");
  1014. } else {
  1015. $(".mgr-bd").show();
  1016. $(".mgr-tip").addClass("mui-hidden");
  1017. }
  1018. mui('#pullrefresh').pullRefresh().endPullupToRefresh((pageIndex * pageSize >= total));
  1019. var dataTree = [];
  1020. var expandFlag = "";
  1021. for (var i = 0; i < length; i++) {
  1022. var obj = res.para.dataList[i];
  1023. // 只要有一台设备支持 自动退款的功能,则显示设置按钮
  1024. if (obj.autoRefundEnable) {
  1025. $("#setAutoRefund").removeClass('mui-hidden')
  1026. }
  1027. // 如果是搜索,默认展开第一组数据
  1028. if (i == 0 && searchKey != "") {
  1029. expandFlag = "mui-active";
  1030. } else {
  1031. expandFlag = "";
  1032. }
  1033. if (obj.groupId != groupId) {
  1034. var cacthData = {};
  1035. cacthData[obj.groupId] = [];
  1036. dataTree.push(cacthData);
  1037. // 如果改分组还没有在页面上,说明是新分组,则展示在页面上
  1038. groupId = obj.groupId;
  1039. if ($("#" + obj.groupId).length == 0) {
  1040. if (obj.isManager) {
  1041. var role = "manage";
  1042. } else {
  1043. var role = "limit-user";
  1044. }
  1045. 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;">' +
  1046. '<div class="mui-checkbox-wear groupSelect"><div class="mui-checkbox"><input class="checkbox-btn" value="" type="checkbox"></div></div>' +
  1047. '<span class="font-18 v-middle" id="' + obj.groupId + '">' +
  1048. obj.name + '</span><em permission="limit-user-show" class="total-mark">合伙</em><span class="mui-pull-right group-ele-total font-12">' +
  1049. '0台</span></a><div class="mui-collapse-content"><ul class="mui-table-view group-content">'
  1050. + '</ul></div></li></ul>';
  1051. $(".list").append(groupList)
  1052. }
  1053. }
  1054. var workStatus = null;//工作状态文字
  1055. var workClass = null;//工作状态样式
  1056. // 设备工作信息: 0空闲 1工作 异常的单独走
  1057. if (obj.status == 0) {
  1058. workClass = "c-success";
  1059. workStatus = "空闲";
  1060. } else if (obj.status == 1) {
  1061. workClass = "c-lgreen";
  1062. workStatus = obj.statusInfo || "繁忙";
  1063. // } else if (obj.status == 2) {
  1064. // workClass = "c-red";
  1065. // workStatus = obj.statusInfo || "故障";
  1066. } else {
  1067. workClass = "font-4";
  1068. workStatus = obj.statusInfo;
  1069. }
  1070. //设备管理状态【人为设置的暂停使用优于一切设备的工作状态】
  1071. if (obj.isFault == true) {
  1072. workStatus = "暂停使用";
  1073. workClass = "c-red";
  1074. }
  1075. var portInfo = ''
  1076. // 如果有端口信息
  1077. if (!$.isEmptyObject(obj.portStatus)) {
  1078. var portStatus = obj.portStatus
  1079. portInfo = '<span class="mui-col-xs-10 mui-col-sm-10 mui-text-left font-b-14-8 margin-t-5">' + portStatus.all + '个端口:';
  1080. if (portStatus.idle) {
  1081. portInfo = portInfo + '<span class="c-green">' + portStatus.idle + '空闲 </span>'
  1082. }
  1083. if (portStatus.used) {
  1084. portInfo = portInfo + '<span class="c-lgreen">' + portStatus.used + '工作 </span>'
  1085. }
  1086. if (portStatus.fault) {
  1087. portInfo = portInfo + '<span class="c-red">' + portStatus.fault + '故障 </span>'
  1088. }
  1089. portInfo = portInfo + '</span>'
  1090. // 置空设备工作信息,因为有端口信息后不需要工作信息
  1091. workStatus = '';
  1092. }
  1093. var signalConfig = getSignalConfig(obj);
  1094. var onlineMarkDom = signalConfig.onlineMarkDom;
  1095. var onlineSignalDom = signalConfig.onlineSignalDom;
  1096. var devDataJson = JSON.stringify(obj);
  1097. var resultList = $('<li class="mui-table-view-cell deviceRow">' +
  1098. '<div class="mui-row">' +
  1099. '<div class="devCheck mui-checkbox-wear"><div class="mui-checkbox"><input class="checkbox-btn" value="" type="checkbox"></div></div>' +
  1100. '<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>' +
  1101. onlineSignalDom +
  1102. portInfo +
  1103. '<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) +
  1104. (obj.sevenDaysAverage!=null ? ('<div>近7日平均使用率为:<span class="c-green">'+obj.sevenDaysAverage+'%<span></div>') : "") +
  1105. (obj.isDND ? ('<div class="c-green">勿扰模式</div>') : "") +
  1106. '</span><div class="mui-pull-right text-right font-12">' +
  1107. (workStatus ? ('<div class="working-status margin-t-5 ' + workClass + '">' + workStatus + '</div>') : "") +
  1108. (obj.deviceWarning ? ('<div class="c-red deviceWarning">' + "告警状态" + '</div>') : "") +
  1109. (obj.simExpireDate ? ('<div class="c-red">SIM卡过期</div>') : "") +
  1110. '</div></div>' +
  1111. '</li>');
  1112. resultList.attr("data", devDataJson)
  1113. var lastElement = dataTree[dataTree.length - 1];
  1114. lastElement[obj.groupId].push(resultList);
  1115. }
  1116. $.each(dataTree, function (i, groupDomMap) {
  1117. //获取到该组id的dom
  1118. for (var groupId in groupDomMap) {
  1119. $("#" + groupId).closest("ul").find(".group-content").append(groupDomMap[groupId]);
  1120. }
  1121. });
  1122. // 设备刷新完后刷新设备在线 总数目
  1123. setDevCount();
  1124. } else {
  1125. mui.toast(res.description);
  1126. }
  1127. });
  1128. }
  1129. // 主机故障点击
  1130. mui('body').on('tap', '.deviceWarning', function (e) {
  1131. // 阻止事件冒泡传递到设备点击事件
  1132. event.stopPropagation();
  1133. var dataStr = $(this).closest(".deviceRow").attr("data");
  1134. var dataJSON;
  1135. var url;
  1136. if (dataStr) {
  1137. dataJSON = JSON.parse(dataStr);
  1138. } else {
  1139. dataJSON = {devType: {}};
  1140. }
  1141. url = 'device-fault.html?logicalCode=' + dataJSON.logicalCode + '&type=' + dataJSON.type;
  1142. pageJumpOper(url);
  1143. });
  1144. // 翻页或是刷新信号,可能会引起设备数量的变化,所以每次都要根据dom树去找在线或离线的设备
  1145. function setDevCount() {
  1146. var g = $(".group-content");
  1147. var onlineTotal = 0;
  1148. $.each(g, function () {
  1149. var e = $(this);
  1150. var len = e.children().length;
  1151. //找到在线的数量
  1152. var onlineLength = $(this).find('.online').length;
  1153. e.parent().prev("a").find(".group-ele-total").html('<em class="c-green">' + onlineLength + '</em>/' + len + "台");
  1154. onlineTotal = onlineLength + onlineTotal
  1155. });
  1156. // 刷新总的数目
  1157. $('.equipmentNum').html('<em class="c-green">' + onlineTotal + '</em>/' + $('.deviceRow').length);
  1158. }
  1159. if (mui.os.plus) {
  1160. mui.plusReady(function () {
  1161. setTimeout(function () {
  1162. mui('#pullrefresh').pullRefresh().pullupLoading();
  1163. }, 1000);
  1164. });
  1165. } else {
  1166. mui.ready(function () {
  1167. mui('#pullrefresh').pullRefresh().pullupLoading();
  1168. });
  1169. }
  1170. </script>
  1171. </body>
  1172. </html>