deviceinfo.jsp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: SamRichard
  4. Date: 2019/7/19
  5. Time: 14:28
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
  9. <%
  10. String strAdmin = (String)request.getParameter("admin");
  11. %>
  12. <!DOCTYPE html>
  13. <html lang="ch">
  14. <head>
  15. <title>阻力监控后台管理系统-设备管理</title>
  16. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  17. <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
  18. <meta content="" name="description"/>
  19. <meta content="" name="author"/>
  20. <!-- BEGIN GLOBAL MANDATORY STYLES -->
  21. <link href="css/gfonts1.css" rel="stylesheet" type="text/css">
  22. <link href="css/font-awesome.min.css" rel="stylesheet" type="text/css">
  23. <link href="css/simple-line-icons.min.css" rel="stylesheet">
  24. <link href="css/bootstrap-editable.css" rel="stylesheet">
  25. <link href="css/bootstrap.min.css" rel="stylesheet">
  26. <!-- END GLOBAL MANDATORY STYLES -->
  27. <!-- BEGIN PAGE LEVEL STYLES -->
  28. <!-- BEGIN THEME STYLES -->
  29. <link href="css/components.css" id="style_components" rel="stylesheet">
  30. <link href="css/plugins.css" rel="stylesheet" type="text/css">
  31. <link href="css/layout.css" rel="stylesheet" type="text/css">
  32. <link href="css/default.css" rel="stylesheet" id="style_color">
  33. <link href="css/sweetalert.css" rel="stylesheet">
  34. <link href="css/bootstrap-table.min.css" rel="stylesheet">
  35. <!-- END THEME STYLES -->
  36. <!-- js -->
  37. <!-- Load jQuery -->
  38. <script src="js/jquery.min.js"></script>
  39. <script src="js/jquery-migrate.min.js" type="text/javascript"></script>
  40. <!-- IMPORTANT! Load jquery-ui-1.10.3.custom.min.js before bootstrap.js to fix bootstrap tooltip conflict with jquery ui tooltip -->
  41. <script src="js/jquery-ui-1.10.3.custom.min.js" type="text/javascript"></script>
  42. <script src="js/bootstrap.min.js" type="text/javascript"></script>
  43. <!-- BEGIN PAGE LEVEL SCRIPTS -->
  44. <script src="js/metronic.js"></script>
  45. <script src="js/scripts/layout.js"></script>
  46. <script src="js/bootstrap-hover-dropdown.min.js" type="text/javascript"></script>
  47. <script src="js/jquery.slimscroll.min.js" type="text/javascript"></script>
  48. <script src="js/jquery.blockui.min.js" type="text/javascript"></script>
  49. <script src="js/jquery.cokie.min.js" type="text/javascript"></script>
  50. <script src="js/jquery.uniform.min.js" type="text/javascript"></script>
  51. <script src="js/morris.min.js" type="text/javascript"></script>
  52. <script src="js/raphael-min.js" type="text/javascript"></script>
  53. <script src="js/jquery.sparkline.min.js" type="text/javascript"></script>
  54. <!--<script src="js/bootstrap-editable.js" type="text/javascript"></script>-->
  55. <!-- END CORE PLUGINS -->
  56. <script src="js/sweetalert.min.js"></script>
  57. <script src="js/jBox.min.js"></script>
  58. <!-- END PAGE LEVEL PLUGINS -->
  59. <!-- test -->
  60. <link rel="shortcut icon" href="favicon.ico">
  61. </head>
  62. <!-- END HEAD -->
  63. <!-- BEGIN BODY -->
  64. <!-- DOC: Apply "page-header-menu-fixed" class to set the mega menu fixed -->
  65. <!-- DOC: Apply "page-header-top-fixed" class to set the top menu fixed -->
  66. <body>
  67. <!-- BEGIN PAGE CONTAINER -->
  68. <div class="page-container">
  69. <!-- BEGIN PAGE HEAD -->
  70. <jsp:include page="frame_head.jsp" flush="false"></jsp:include>
  71. <!-- END PAGE HEAD -->
  72. <!-- BEGIN PAGE CONTENT -->
  73. <div class="page-content">
  74. <div class="container">
  75. <div style="margin: 15px;">
  76. <table id="table"
  77. data-sort-order="desc" data-sort-name="updatetime"
  78. data-sort-field="updatetime" data-unique-id="IMEI"
  79. data-detail-view="true" data-detail-formatter="detailFormatter"
  80. data-minimum-count-columns="2" data-show-pagination-switch="false"
  81. data-pagination="true" data-id-field="IMEI" data-id-table="advancedTable"
  82. data-page-list="[50, 100, 200, 500, 1000]" data-show-footer="false"
  83. data-query-params="queryParam" data-search-on-enter-key="true"
  84. data-side-pagination="server" data-url="getdeviceinfo.cpp?<%=request.getQueryString() + "&timestamp=" + System.currentTimeMillis()%>"
  85. data-response-handler="responseHandler">
  86. </table>
  87. </div>
  88. </div>
  89. </div>
  90. <!-- END PAGE CONTENT -->
  91. <!-- END PAGE CONTENT -->
  92. <jsp:include page="frame_tail.jsp" flush="false"></jsp:include>
  93. <!-- END PAGE CONTAINER -->
  94. </div>
  95. <!--
  96. <script src="js/jquery-3.1.1.min.js"></script>
  97. <script src="js/bootstrap.min.js"></script>
  98. <script src="js/sweetalert2.min.js"></script>
  99. -->
  100. <!-- for IE support -->
  101. <!--
  102. <script src="js/es6-promise.auto.min.js"></script>
  103. -->
  104. <script>
  105. (function($){
  106. Date.prototype.format = function(fmt) {
  107. var o = {
  108. "M+" : this.getMonth()+1, //月份
  109. "d+" : this.getDate(), //日
  110. "h+" : this.getHours(), //小时
  111. "m+" : this.getMinutes(), //分
  112. "s+" : this.getSeconds(), //秒
  113. "q+" : Math.floor((this.getMonth()+3)/3), //季度
  114. "S" : this.getMilliseconds() //毫秒
  115. };
  116. if(/(y+)/.test(fmt)) {
  117. fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  118. }
  119. for(var k in o) {
  120. if(new RegExp("("+ k +")").test(fmt)){
  121. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  122. }
  123. }
  124. return fmt;
  125. }
  126. }(jQuery));
  127. jQuery(document).ready(function () {
  128. //Metronic.init(); // init metronic core components
  129. //Layout.init(); // init current layout
  130. // IE8 Fix: function.bind polyfill
  131. if (Metronic.isIE8() && !Function.prototype.bind) {
  132. Function.prototype.bind = function (oThis) {
  133. if (typeof this !== "function") {
  134. // closest thing possible to the ECMAScript 5 internal IsCallable function
  135. throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
  136. }
  137. var aArgs = Array.prototype.slice.call(arguments, 1),
  138. fToBind = this,
  139. fNOP = function () {
  140. },
  141. fBound = function () {
  142. return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
  143. aArgs.concat(Array.prototype.slice.call(arguments)));
  144. };
  145. fNOP.prototype = this.prototype;
  146. fBound.prototype = new fNOP();
  147. return fBound;
  148. };
  149. }
  150. });
  151. //表格
  152. var $table = $('#table');
  153. function initTable() {
  154. $table.bootstrapTable({
  155. height: getHeight(),
  156. //exportDataType: "basic",
  157. columns: [{
  158. field: 'IMEI',
  159. title: "IMEI",
  160. align: 'center',
  161. visible: true,
  162. }, {
  163. title: '名称',
  164. field: 'name',
  165. align: 'center',
  166. //valign: 'middle',
  167. sortable: true,
  168. visible: true,
  169. formatter: function (value, row, inde){
  170. if (value == undefined)
  171. return "";
  172. return value;
  173. },
  174. <% if (strAdmin != null) {%>
  175. editable: {
  176. type: 'text',
  177. title: '修改名称',
  178. placement: 'right',
  179. validate: function(v) {
  180. if (!v) return '名称不能为空';
  181. },
  182. },
  183. <%}%>
  184. }, {
  185. field: 'groupid',
  186. title: '组ID',
  187. searchable: true,
  188. visible: false,
  189. align: 'center',
  190. sortable: true
  191. }, {
  192. field: 'CCID',
  193. title: 'CCID',
  194. searchable: true,
  195. visible: false,
  196. align: 'center',
  197. filterControl:"select",
  198. }, {
  199. field: 'type',
  200. title: 'type',
  201. searchable: true,
  202. visible: false,
  203. align: 'center',
  204. filterControl:"select",
  205. }, {
  206. field: 'version',
  207. title: 'version',
  208. searchable: true,
  209. visible: false,
  210. align: 'center',
  211. filterControl:"select",
  212. }, {
  213. field: 'longitude',
  214. title: 'longitude',
  215. align: 'center',
  216. visible: false,
  217. }, {
  218. field: 'latitude',
  219. title: 'latitude',
  220. align: 'center',
  221. visible: false,
  222. }, {
  223. field: 'updatetime',
  224. title: '最后在线时间',
  225. align: 'center',
  226. visible: true,
  227. sortable: true,
  228. formatter: function (value, row, inde) {
  229. return new Date(value).format("yyyy-MM-dd hh:mm:ss");
  230. },
  231. }, {
  232. field: 'mo',
  233. title: "设备位置",
  234. align: 'center',
  235. }, {
  236. field: 'view',
  237. title: '查看阻力',
  238. align: 'center',
  239. width: 25,
  240. formatter: function (value, row, inde){
  241. return [
  242. row.group0name,
  243. ' ',
  244. '<a class="handle" title="查询阻力曲线" data-imei="' + row.IMEI + '" data-name="' + row.name + '" data-idxname= "' + row.group0name + '" onclick="view(this)">',
  245. '<i class="glyphicon glyphicon-picture"></i>', '</a>',
  246. ' ',
  247. row.mp0]
  248. .join('');
  249. },
  250. }, {
  251. title: '1机名称',
  252. field: 'group0name',
  253. align: 'center',
  254. <% if (strAdmin == null) {%>
  255. visible: false,
  256. <%} %>
  257. formatter: function (value, row, inde){
  258. if (value == undefined)
  259. return "";
  260. return value;
  261. },
  262. editable: {
  263. type: 'text',
  264. title: '修改名称',
  265. placement: 'right',
  266. validate: function(v) {
  267. if (!v) return '名称不能为空';
  268. },
  269. },
  270. }, {
  271. field: 'view2',
  272. title: '查看阻力',
  273. align: 'center',
  274. width: 25,
  275. formatter: function (value, row, inde){
  276. return [
  277. row.group1name,
  278. ' ',
  279. '<a class="handle" title="查询阻力曲线" data-imei="' + row.IMEI + '" data-name="' + row.name + '" data-idxname= "' + row.group1name + '" onclick="view2(this)">',
  280. '<i class="glyphicon glyphicon-picture"></i>', '</a>',
  281. ' ',
  282. row.mp1]
  283. .join('');
  284. },
  285. }, {
  286. title: '2机名称',
  287. field: 'group1name',
  288. align: 'center',
  289. //valign: 'middle',
  290. <% if (strAdmin == null) {%>
  291. visible: false,
  292. <%} %>
  293. formatter: function (value, row, inde){
  294. if (value == undefined)
  295. return "";
  296. return value;
  297. },
  298. editable: {
  299. type: 'text',
  300. title: '修改名称',
  301. placement: 'right',
  302. validate: function(v) {
  303. if (!v) return '名称不能为空';
  304. },
  305. },
  306. }, {
  307. field: 'view3',
  308. title: '查看阻力',
  309. align: 'center',
  310. width: 25,
  311. formatter: function (value, row, inde){
  312. return [
  313. row.group2name,
  314. ' ',
  315. '<a class="handle" title="查询阻力曲线" data-imei="' + row.IMEI + '" data-name="' + row.name + '" data-idxname= "' + row.group2name + '" onclick="view3(this)">',
  316. '<i class="glyphicon glyphicon-picture"></i>', '</a>',
  317. ' ',
  318. row.mp2]
  319. .join('');
  320. },
  321. }, {
  322. title: '3机名称',
  323. field: 'group2name',
  324. align: 'center',
  325. //valign: 'middle',
  326. <% if (strAdmin == null) {%>
  327. visible: false,
  328. <%} %>
  329. formatter: function (value, row, inde){
  330. if (value == undefined)
  331. return "";
  332. return value;
  333. },
  334. editable: {
  335. type: 'text',
  336. title: '修改名称',
  337. placement: 'right',
  338. validate: function(v) {
  339. if (!v) return '名称不能为空';
  340. },
  341. },
  342. }, {
  343. field: 'temphumi',
  344. title: '查看温湿度',
  345. align: 'center',
  346. width: 25,
  347. formatter: function (value, row, inde){
  348. return [
  349. '<a class="handle" title="查询温湿度曲线" data-imei="' + row.IMEI + '" data-name="' + row.name + '" onclick="view4(this)">',
  350. '<i class="glyphicon glyphicon-tint"></i>', '</a>']
  351. .join('');
  352. },
  353. }, {
  354. field: 'del',
  355. title: '删除设备',
  356. align: 'center',
  357. <% if (strAdmin == null) {%>
  358. visible: false,
  359. <%} %>
  360. width: 25,
  361. formatter: function(value, row, index)
  362. {
  363. return [
  364. '<a class="handle" title="删除记录" data-imei="' + row.IMEI + '" onclick="removealarm(this)">',
  365. '<i class="glyphicon glyphicon-remove"></i>', '</a>']
  366. .join('');
  367. },
  368. }],
  369. responseHandler: function (res) {
  370. return res;
  371. },
  372. //编辑时触发
  373. onEditableSave: function (field, row, oldValue, $el) {
  374. var reqUrl = "";
  375. if (field === "name")
  376. reqUrl = "updatedeviceinfo.cpp?IMEI=" + row.IMEI + "&updatefield=" + field + "&updatevalue=" + row.name;
  377. else if (field === "group0name")
  378. reqUrl = "updatedeviceinfo.cpp?IMEI=" + row.IMEI + "&updatefield=" + field + "&updatevalue=" + row.group0name;
  379. else if (field === "group1name")
  380. reqUrl = "updatedeviceinfo.cpp?IMEI=" + row.IMEI + "&updatefield=" + field + "&updatevalue=" + row.group1name;
  381. else if (field === "group2name")
  382. reqUrl = "updatedeviceinfo.cpp?IMEI=" + row.IMEI + "&updatefield=" + field + "&updatevalue=" + row.group2name;
  383. else
  384. return ;
  385. $table.bootstrapTable("resetView");
  386. $.ajax({
  387. type: "post",
  388. url: reqUrl,
  389. //data: row,
  390. //dataType: 'JSON',
  391. success: function (data, status) {
  392. if (status == "success") {
  393. swal({
  394. title: 'success',
  395. text: '提交数据成功.',
  396. type: 'success',
  397. timer: 1500,
  398. confirmButtonText: "确定"
  399. }).then(
  400. function (dismiss) {
  401. if (dismiss === 'timer') {
  402. console.log('I was closed by the timer')
  403. }
  404. }
  405. );
  406. }
  407. },
  408. error: function () {
  409. alert('编辑失败');
  410. swal({
  411. title: 'error',
  412. text: '提交数据失败.',
  413. type: 'success',
  414. timer: 1500,
  415. confirmButtonText: "确定"
  416. }).then(
  417. function (dismiss) {
  418. if (dismiss === 'timer') {
  419. console.log('I was closed by the timer')
  420. }
  421. }
  422. );
  423. },
  424. complete: function () {
  425. }
  426. });
  427. },
  428. });
  429. // sometimes footer render error.
  430. setTimeout(function () {
  431. $table.bootstrapTable('resetView');
  432. }, 200);
  433. $table.on('expand-row.bs.table', function (e, index, row, $detail) {
  434. });
  435. $table.on('all.bs.table', function (e, name, args) {
  436. console.log(name, args);
  437. });
  438. $(window).resize(function () {
  439. $table.bootstrapTable('resetView', {
  440. height: getHeight()
  441. });
  442. });
  443. }
  444. function queryParam(params) {
  445. return params;
  446. }
  447. window.operateEvents = {};
  448. function getHeight() {
  449. var h = $(window).height();
  450. return h - 75 - 102 - 30;
  451. }
  452. function view(t){
  453. if (t.dataset.imei)
  454. {
  455. window.location.href='resistance.cpp?IMEI=' + t.dataset.imei + '&name=' + t.dataset.name + '&idx=0' + "&src=1&idxname=" + t.dataset.idxname;
  456. }
  457. }
  458. function view2(t){
  459. if (t.dataset.imei)
  460. {
  461. window.location.href='resistance.cpp?IMEI=' + t.dataset.imei + '&name=' + t.dataset.name + '&idx=1' + "&src=1&idxname=" + t.dataset.idxname;
  462. }
  463. }
  464. function view3(t){
  465. if (t.dataset.imei)
  466. {
  467. window.location.href='resistance.cpp?IMEI=' + t.dataset.imei + '&name=' + t.dataset.name + '&idx=2' + "&src=1&idxname=" + t.dataset.idxname;
  468. }
  469. }
  470. function view4(t){
  471. if (t.dataset.imei)
  472. {
  473. window.location.href='temphumi.cpp?IMEI=' + t.dataset.imei + '&name=' + t.dataset.name;
  474. }
  475. }
  476. function detailFormatter(index, row) {
  477. var html = [];
  478. html.push('<div class="well well-sm">');
  479. html.push('<ul>');
  480. html.push('<li>CCID:' + row.CCID);
  481. html.push('<li>经度:' + row.longitude);
  482. html.push('<li>纬度:' + row.latitude);
  483. if (row.type)
  484. html.push('<li>type:' + row.type);
  485. if (row.version)
  486. html.push('<li>版本:' + row.version);
  487. if (row.model == 0)
  488. html.push('<li>模式:数据模式');
  489. else if (row.model == 1)
  490. html.push('<li>模式:升级模式');
  491. html.push('</ul>');
  492. html.push('</div>');
  493. return html.join('');
  494. }
  495. function removealarm(t) {
  496. if (t.dataset.guid){
  497. $.post("deletealarm.cpp", {IMEI : t.dataset.guid}, function (data, status) {
  498. if (data)
  499. {
  500. swal({
  501. title: 'success',
  502. text: '删除成功.',
  503. type: 'success',
  504. timer: 2500,
  505. confirmButtonText: "确定"
  506. }).then(
  507. function () {},
  508. // handling the promise rejection
  509. function (dismiss) {
  510. if (dismiss === 'timer') {
  511. console.log('I was closed by the timer')
  512. }
  513. }
  514. );
  515. var obj = $table.bootstrapTable('removeByUniqueId', t.dataset.guid);
  516. return ;
  517. }
  518. swal({
  519. title: 'error!',
  520. text: '删除失败.',
  521. timer: 2500,
  522. type: 'error',
  523. confirmButtonText: "确定"
  524. }).then(
  525. function () {},
  526. // handling the promise rejection
  527. function (dismiss) {
  528. if (dismiss === 'timer') {
  529. console.log('I was closed by the timer')
  530. }
  531. }
  532. );
  533. });
  534. }
  535. }
  536. $(function () {
  537. var scripts = [
  538. //location.search.substring(1) ||
  539. 'js/bootstrap-table.min.js', 'js/bootstrap-table-zh-CN.min.js',
  540. //'js/bootstrap-table-export.min.js', 'js/tableExport.js',
  541. 'js/bootstrap-table-editable.min.js',
  542. //"js/bootstrap-table-filter-control.js",
  543. 'js/bootstrap-editable.min.js',
  544. //'js/bootstrap-table-toolbar.min.js'
  545. ], eachSeries = function (arr, iterator, callback) {
  546. callback = callback || function () {
  547. };
  548. if (!arr.length) {
  549. return callback();
  550. }
  551. var completed = 0;
  552. var iterate = function () {
  553. iterator(arr[completed], function (err) {
  554. if (err) {
  555. callback(err);
  556. callback = function () {
  557. };
  558. } else {
  559. completed += 1;
  560. if (completed >= arr.length) {
  561. callback(null);
  562. } else {
  563. iterate();
  564. }
  565. }
  566. });
  567. };
  568. iterate();
  569. };
  570. eachSeries(scripts, getScript, initTable);
  571. });
  572. function getScript(url, callback) {
  573. var head = document.getElementsByTagName('head')[0];
  574. var script = document.createElement('script');
  575. script.src = url;
  576. var done = false;
  577. // Attach handlers for all browsers
  578. script.onload = script.onreadystatechange = function () {
  579. if (!done
  580. && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
  581. done = true;
  582. if (callback)
  583. callback();
  584. // Handle memory leak in IE
  585. script.onload = script.onreadystatechange = null;
  586. }
  587. };
  588. head.appendChild(script);
  589. // We handle everything using the script element injection
  590. return undefined;
  591. }
  592. </script>
  593. </body>
  594. <!-- END BODY -->
  595. </html>