siminfo.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. {% load staticfiles %}
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8" />
  6. <link href="{% static '/lib/bootstrap-3.3.7/css/bootstrap.css' %}" rel="stylesheet">
  7. <link rel="stylesheet" href="{% static '/lib/font-awesome/4.5.0/css/font-awesome.css' %}">
  8. <link rel="stylesheet" href="{% static '/lib/css/ace.min.css' %}" />
  9. <link rel="stylesheet" href="{% static '/lib/css/ace-skins.min.css' %}">
  10. <link rel="stylesheet" href="{% static '/lib/css/ace-rtl.min.css' %}">
  11. <link rel="stylesheet" href="{% static '/lib/layui/css/layui.css' %}">
  12. <style type="text/css">
  13. body {
  14. overflow: hidden;
  15. background: #fff;
  16. }
  17. .searchCover {
  18. margin: 20px 0;
  19. }
  20. .floatRright {
  21. display: inline-block;
  22. float: right;
  23. }
  24. .innerTable {
  25. padding: 0 1px 0 0;
  26. min-width: 750px;
  27. overflow-x: scroll;
  28. }
  29. .table,
  30. .table.table-striped>thead>tr>th {
  31. text-align: center;
  32. }
  33. table td {
  34. vertical-align: middle !important;
  35. }
  36. .nullData {
  37. width: 100%;
  38. height: 500px;
  39. background: #ddd;
  40. text-align: center;
  41. line-height: 500px;
  42. font-size: 20px;
  43. border: 1px solid #ddd;
  44. }
  45. .refresh {
  46. font-size: 16px;
  47. color: #4C8FBD;
  48. margin-right: 30px;
  49. }
  50. .content {
  51. overflow-x: scroll;
  52. }
  53. #bindingEquipBox {
  54. display: none;
  55. }
  56. #bindingRes>div {
  57. padding: 10px 0;
  58. border-bottom: 1px solid #a2a2a2;
  59. }
  60. /* 充值 */
  61. .rechargeParent {
  62. display: none;
  63. }
  64. .rechargeParent>h2 {
  65. line-height: 46px;
  66. font-size: 24px;
  67. background: #ECECEC;
  68. border-bottom: 1px solid #ddd;
  69. padding-left: 17px;
  70. margin-bottom: 30px;
  71. }
  72. .recharge-demo {
  73. width: 90%;
  74. margin: 0 auto;
  75. border: 2px solid #ddd;
  76. text-align: center;
  77. cursor: pointer;
  78. position: relative;
  79. margin-bottom: 30px;
  80. }
  81. .recharge-demo:hover,
  82. .recharge-demo.active {
  83. border: 2px solid red;
  84. }
  85. .recharge-demo.active .switchIcon {
  86. position: absolute;
  87. bottom: 0;
  88. right: 0;
  89. height: 47px;
  90. width: 52px;
  91. background: url(../static/img/rechargeIcon.png);
  92. }
  93. .recharge-name {
  94. color: #818181;
  95. font-size: 26px;
  96. font-weight: 700;
  97. letter-spacing: 2px;
  98. line-height: 47px;
  99. border-bottom: 1px dashed #ddd;
  100. }
  101. .price {
  102. font-size: 33px;
  103. color: red;
  104. padding: 12px 0 4px;
  105. letter-spacing: 1px;
  106. }
  107. .price span {
  108. font-size: 14px;
  109. }
  110. .desc {
  111. font-size: 14px;
  112. letter-spacing: 2px;
  113. color: #8d8d8d;
  114. padding-bottom: 20px;
  115. }
  116. .increase {
  117. width: 38px;
  118. height: 32px;
  119. border: 2px white;
  120. float: left;
  121. background: #ececec;
  122. }
  123. .increase:hover {
  124. background: #d9d9d9;
  125. }
  126. .increaseVal {
  127. text-align: center;
  128. width: 50px;
  129. height: 32px;
  130. float: left;
  131. }
  132. .increaseBtnDiv {
  133. width: 145px;
  134. display: inline-block;
  135. vertical-align: middle;
  136. }
  137. .rechargeBtnDiv {
  138. text-align: right;
  139. padding: 0 20px 20px;
  140. }
  141. .rechargeA {
  142. display: none;
  143. }
  144. #echarts {
  145. margin: 20px;
  146. display: none;
  147. }
  148. .echartsBox {
  149. width: 380px;
  150. margin: 0 auto;
  151. height: 380px;
  152. }
  153. #pie-chart {
  154. width: 400PX;
  155. height: 400PX;
  156. }
  157. /* 新增布局 */
  158. .row {
  159. margin-right: 0;
  160. margin-left: 0;
  161. }
  162. .operate {
  163. height: 30px;
  164. }
  165. .echeatTitle {
  166. color: #0ca3fa;
  167. font-size: 18px;
  168. border-left: 3px solid #0ca3fa;
  169. padding-left: 10px;
  170. }
  171. .echartsDiv {
  172. width: 80%;
  173. height: 400px;
  174. margin: 0 auto;
  175. }
  176. .modal.fade.in{
  177. top:190px;
  178. }
  179. </style>
  180. <body>
  181. <div class="content">
  182. <div class="operate searchCover">
  183. <div class="floatRright">
  184. <a class="refresh rechargeA" onclick="rechargeFun()" href="javascript:;">
  185. <i class="fa fa-jpy" aria-hidden="true" width="28"></i>
  186. 充值 </a>
  187. <a class="refresh" onclick="examineEquip()" href="javascript:;">
  188. <i class="fa fa-search" aria-hidden="true" width="28"></i>
  189. 绑定设备查询 </a>
  190. <a class="refresh" onclick="examineSIM()" href="javascript:;">
  191. <i class="fa fa-search" aria-hidden="true" width="28"></i>
  192. SIM卡查询 </a>
  193. </div>
  194. </div>
  195. <div>
  196. <div class="row">
  197. <div class="col-xs-12 col-sm-4">
  198. <div>
  199. <div class="echeatTitle">全部状态比例</div>
  200. <div class="echartsDiv" id="echartsAll"></div>
  201. </div>
  202. </div>
  203. <div class="col-xs-12 col-sm-4">
  204. <div>
  205. <div class="echeatTitle">测报灯状态比例</div>
  206. <div class="echartsDiv" id="echartsCbd"></div>
  207. </div>
  208. </div>
  209. <div class="col-xs-12 col-sm-4">
  210. <div>
  211. <div class="echeatTitle">环境监测状态比例</div>
  212. <div class="echartsDiv" id="echartsScd"></div>
  213. </div>
  214. </div>
  215. </div>
  216. </div>
  217. <div class="searchCover">
  218. 设备ID:
  219. <input type="text" id="imei" autocomplete="off" placeholder="请输入设备ID" onkeypress="if (event.keyCode == 13) sub_filter();"> SIM卡iccid:
  220. <input type="text" value="" class="" id="iccid" autocomplete="off" placeholder="请输入SIM卡iccid" onkeypress="if (event.keyCode == 13) sub_filter();"
  221. /> SIM卡状态:
  222. <select name="" id="status">
  223. <option value="">请选择</option>
  224. <option value="1">测试期</option>
  225. <option value="2">沉默期</option>
  226. <option value="3">使用中</option>
  227. <option value="4">停机</option>
  228. <option value="5">停机保号</option>
  229. <option value="6">预销号</option>
  230. <option value="7">销号</option>
  231. <option value="0">未知</option>
  232. </select>
  233. <button type="button" onclick="sub_filter()" class="btn btn-sm btn-primary">筛选</button>
  234. <button type="button" class="btn btn-success btn-sm" onclick="decideExport()">导出</button>
  235. <!-- <button type="button" onclick="lookEchart()" class="btn btn-sm btn-success">状态统计</button> -->
  236. </div>
  237. <div class="innerTable">
  238. <table id="datatable" class="table table-striped table-hover">
  239. <thead>
  240. <tr>
  241. <th>设备ID</th>
  242. <th>设备名称</th>
  243. <th>设备类型</th>
  244. <th>SIM卡iccid</th>
  245. <th>激活日期</th>
  246. <th>SIM卡状态</th>
  247. <th>套餐(Mb)</th>
  248. <th>已用流量(Mb)</th>
  249. <th>剩余流量(Mb)</th>
  250. <th>到期时间</th>
  251. </tr>
  252. </thead>
  253. <tbody>
  254. </tbody>
  255. </table>
  256. <div class="fenpei-bottom">
  257. <input type="hidden" id="totalPage" value={{ nums }}>
  258. <div id="page" style="text-align: center;"></div>
  259. </div>
  260. </div>
  261. <!-- 绑定设备展示框 -->
  262. <div id="bindingEquipBox" style="display:none">
  263. <div style="padding: 50px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">
  264. <div>绑定设备查询结果</div>
  265. <p id="curIccid">ICCID: text</p>
  266. <div id="bindingRes">
  267. <!-- <div>
  268. 状态:status
  269. <br>套餐dat.data_plan'Mb
  270. <br>已用流量:usage Mb
  271. <br>剩余流量:balanceMb
  272. <br>到期时间:89860401101700076454
  273. </div> -->
  274. </div>
  275. </div>
  276. </div>
  277. <!-- 充值 -->
  278. <div id="voucherModel" class="rechargeParent">
  279. <h2>充值套餐选择</h2>
  280. <input type="hidden" value="" class="currIccid">
  281. <div class="layui-row">
  282. <div class="layui-col-xs4">
  283. <div class="recharge-demo">
  284. <input type="hidden" value="22" class="product_id">
  285. <div class="recharge-name">10MB</div>
  286. <div>
  287. <div class="price">999
  288. <span>元</span>
  289. </div>
  290. <div class="desc">6个月每月10Mb</div>
  291. </div>
  292. <div class="switchIcon"></div>
  293. </div>
  294. </div>
  295. <div class="layui-col-xs4">
  296. <div class="recharge-demo active">
  297. <div class="recharge-name">10MB</div>
  298. <div>
  299. <div class="price">999
  300. <span>元</span>
  301. </div>
  302. <div class="desc">6个月每月10Mb</div>
  303. </div>
  304. <div class="switchIcon"></div>
  305. </div>
  306. </div>
  307. <div class="layui-col-xs4">
  308. <div class="recharge-demo">
  309. <div class="recharge-name">10MB</div>
  310. <div>
  311. <div class="price">999
  312. <span>元</span>
  313. </div>
  314. <div class="desc">6个月每月10Mb</div>
  315. </div>
  316. <div class="switchIcon"></div>
  317. </div>
  318. </div>
  319. </div>
  320. <div class="rechargeBtnDiv">
  321. <div class="increaseBtnDiv">
  322. <input class="increase" type="button" value="-" onclick="reductionOf(this)" />
  323. <input class="increaseVal" type="text" value="1" onblur="checkNumber(this)" />
  324. <input class="increase" type="button" value="+" onclick="add(this)" />
  325. </div>
  326. <button type="button" id="shaixuan" onclick="confirmFun()" class="btn btn-sm btn-primary">充值</button>
  327. <button type="button" id="shaixuan" onclick="cancelFun()" class="btn btn-sm ">取消</button>
  328. </div>
  329. </div>
  330. <!-- 统计图 -->
  331. <div class="" id="echarts">
  332. 设备类型:
  333. <select name="" id="typeSelect">
  334. <option value="">全部</option>
  335. <option value="2">杀虫灯</option>
  336. <option value="3">测报灯</option>
  337. </select>
  338. <div class="echartsBox fl">
  339. <div class="hint"></div>
  340. <div class="fl" id="pie-chart">1</div>
  341. </div>
  342. </div>
  343. <!-- 导出提示框 -->
  344. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  345. <div class="modal-dialog" role="document">
  346. <div class="modal-content">
  347. <div class="modal-header">
  348. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  349. <span aria-hidden="true">&times;</span>
  350. </button>
  351. <h4 class="modal-title" id="myModalLabel">导出信息</h4>
  352. </div>
  353. <div class="modal-body">
  354. <div class="row">
  355. <div class="col-xs-3 downTitle">文件名称:</div>
  356. <div class="col-xs-8 downContent" style=>
  357. <input type="text" id="filename" placeholder="请输入文件的名称" maxlength="15" class="col-xs-12">
  358. </div>
  359. </div>
  360. </div>
  361. <div class="modal-footer">
  362. <button type="button" class="btn btn-default btn-sm" data-dismiss="modal">取消</button>
  363. <button type="button" class="btn btn-primary btn-sm" onclick="operation()">下载</button>
  364. </div>
  365. </div>
  366. </div>
  367. </div>
  368. </div>
  369. <script src="{% static '/lib/js/jquery-2.1.4.min.js' %}"></script>
  370. <script src="{% static '/lib/bootstrap-3.3.7/js/bootstrap.js' %}"></script>
  371. <script src="{% static '/lib/js/coordOffset.js' %}"></script>
  372. <script src="{% static '/js/common.js' %}"></script>
  373. <!-- 纠偏 -->
  374. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=TcRPmrsiZUqdUBWoELrUArRkCRC36KMx"></script>
  375. <script src="{% static '/lib/layui/layui.all.js' %}"></script>
  376. <script type="text/javascript">
  377. $.ajaxSetup({
  378. data: { csrfmiddlewaretoken: '{{ csrf_token }}' },
  379. });
  380. </script>
  381. <script src="{% static '/lib/js/echarts.min.js' %}"></script>
  382. <script src="{% static '/js/siminfo/siminfo.js' %}?versions=0.5.0" type="text/javascript"></script>
  383. <script>
  384. // var colorList = ['#609657', '#6fb2e2', '#ff0000', '#e8ad2c', '#af5183', '#f1cfc7', '#911d5a', '#609657',];
  385. pieOption = {
  386. title: {
  387. // text: 'SIM卡状态比例',
  388. textStyle: {
  389. color: '#029eef'
  390. }
  391. },
  392. tooltip: {
  393. trigger: 'item',
  394. formatter: "{a} <br/>{b} : {c} ({d}%)"
  395. },
  396. legend: {
  397. orient: 'vertical',
  398. left: 'right',
  399. data: []
  400. },
  401. grid: {
  402. left: '3%',
  403. right: '4%',
  404. bottom: '6%',
  405. containLabel: true
  406. },
  407. series: [
  408. {
  409. name: '状态比例',
  410. type: 'pie',
  411. radius: '55%',
  412. radius: ['0%', '70%'],
  413. data: [],
  414. itemStyle: {
  415. emphasis: {
  416. shadowBlur: 10,
  417. shadowOffsetX: 0,
  418. shadowColor: 'rgba(0, 0, 0, 0.5)'
  419. },
  420. normal: {
  421. // color: function (params) {
  422. // //自定义颜色
  423. // return colorList[params.dataIndex]
  424. // }
  425. }
  426. }
  427. }
  428. ]
  429. };
  430. var echartsAll = echarts.init(document.getElementById('echartsAll'));
  431. var echartsCbd = echarts.init(document.getElementById('echartsCbd'));
  432. var echartsScd = echarts.init(document.getElementById('echartsScd'));
  433. getEchartData1('', echartsAll);
  434. getEchartData1('3', echartsCbd);
  435. getEchartData1('5', echartsScd);
  436. function getEchartData1(etype, obj) {
  437. $.ajax({
  438. url: 'siminfo_chart',
  439. type: 'post',
  440. data: {
  441. etype: etype,
  442. },
  443. dataType: 'json',
  444. success: function (data) {
  445. renderEchart1(data, obj);
  446. },
  447. error: function (type) {
  448. console.log(type)
  449. }
  450. })
  451. }
  452. function renderEchart1(data, obj) {
  453. var v0 = 0, v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0, v6 = 0, v7 = 0;
  454. for (var i = 0; i < data.length; i++) {
  455. if (data[i] == 0) {
  456. v0++;
  457. } else if (data[i] == 1) {
  458. v1++;
  459. } else if (data[i] == 2) {
  460. v2++;
  461. } else if (data[i] == 3) {
  462. v3++;
  463. } else if (data[i] == 4) {
  464. v4++;
  465. } else if (data[i] == 5) {
  466. v5++;
  467. } else if (data[i] == 6) {
  468. v6++;
  469. } else if (data[i] == 7) {
  470. v7++;
  471. }
  472. if (i == data.length - 1) {
  473. var dat = []
  474. var colorList = []
  475. if (v0) {
  476. dat.push({ value: v0, name: "未知" });
  477. colorList.push('#000');
  478. }
  479. if (v1) {
  480. dat.push({ value: v1, name: "测试期" })
  481. colorList.push('#63a879');
  482. }
  483. if (v2) {
  484. dat.push({ value: v2, name: "沉默期" })
  485. colorList.push('#b4b4b4');
  486. }
  487. if (v3) {
  488. dat.push({ value: v3, name: "使用中" })
  489. colorList.push('#6fb2e2');
  490. }
  491. if (v4) {
  492. dat.push({ value: v4, name: "停机" })
  493. colorList.push('#f29898');
  494. }
  495. if (v5) {
  496. dat.push({ value: v5, name: "停机保号" })
  497. colorList.push('#850000');
  498. }
  499. if (v6) {
  500. dat.push({ value: v6, name: "预销号" })
  501. colorList.push('#ff8a2a');
  502. }
  503. if (v7) {
  504. dat.push({ value: v7, name: "销号" })
  505. colorList.push('#FF0000');
  506. }
  507. pieOption.series[0].data = dat;
  508. pieOption.series[0].itemStyle.normal.color = function(params){
  509. return colorList[params.dataIndex]
  510. };
  511. obj.setOption(pieOption);
  512. }
  513. }
  514. }
  515. echartsAll.on("click", function (param) {
  516. pieConsole(param, '')
  517. });
  518. echartsCbd.on("click", function (param) {
  519. pieConsole(param, '3')
  520. });
  521. echartsScd.on("click", function (param) {
  522. pieConsole(param, '2')
  523. });
  524. function pieConsole(param, type) {
  525. // 获取data长度
  526. // console.log(pieOption.series[0].data.length);
  527. // 获取地N个data的值
  528. // console.log(pieOption);
  529. // 获取series中param.dataIndex事件对应的值
  530. // console.log(param.value);
  531. // console.log(param.name);
  532. // console.log(pieOption.series[param.seriesIndex].data[param.dataIndex].value);
  533. // console.log(pieOption.series[param.seriesIndex].data[param.dataIndex].name);
  534. //   clickFunc(param.dataIndex);//执行点击效果,触发相应js函数
  535. //param具体包含的方法见 https://blog.csdn.net/allenjay11/article/details/76033232
  536. getPieData(type, param.name)
  537. //刷新页面
  538. // location.reload();
  539. // window.location.reload();
  540. }
  541. // 点击饼状图获取数据
  542. function getPieData(type, para) {
  543. var accountStatus = 0;
  544. if (para == "未知") {
  545. accountStatus = "0";
  546. } else if (para == "测试期") {
  547. accountStatus = "1";
  548. } else if (para == "沉默期") {
  549. accountStatus = "2";
  550. } else if (para == "使用中") {
  551. accountStatus = "3";
  552. } else if (para == "停机") {
  553. accountStatus = "4";
  554. } else if (para == "停机保号") {
  555. accountStatus = "5";
  556. } else if (para == "预销号") {
  557. accountStatus = "6";
  558. } else if (para == "销号") {
  559. accountStatus = "7";
  560. }
  561. $('#imei').val('');
  562. $('#iccid').val('');
  563. $('#status').val('');
  564. geteChartsData(1, 1, type, accountStatus)
  565. // console.log(type+','+para)
  566. console.log(type + ',' + accountStatus)
  567. }
  568. window.onresize = function () {
  569. //当窗口发生变化时图表显示
  570. echartsAll.resize();
  571. echartsCbd.resize();
  572. echartsScd.resize();
  573. // pieChart.resize();
  574. }
  575. function geteChartsData(page, currpage, e_type, status) {
  576. $.ajax({
  577. type: 'get',
  578. url: 'siminfo_listview',
  579. data: {
  580. page: page,
  581. e_type: e_type,
  582. status: status
  583. },
  584. dataType: "html",
  585. beforeSend: function () {
  586. $('#loadingParent').show();
  587. },
  588. complete: function () {
  589. $('#loadingParent').hide();
  590. },
  591. success: function (data) {
  592. $('#datatable').children().eq(1).html(data);
  593. scrollBar();
  594. layui.use('laypage', function () {
  595. var laypage = layui.laypage;
  596. laypage.render({
  597. elem: 'page' //注意,这里的 test1 是 ID,不用加 # 号
  598. // ,count: 30
  599. , curr: currpage
  600. , count: $('#total_nums').val()
  601. , theme: '#428BCA'
  602. , layout: ['prev', 'page', 'next', 'skip']
  603. , jump: function (obj, first) {
  604. if (!first) {
  605. $("#datatable tr:not(:first)").html("");
  606. geteChartsData(obj.curr, obj.curr, e_type, status);
  607. }
  608. }
  609. });
  610. });
  611. },
  612. error: function (type) {
  613. console.log(type)
  614. }
  615. })
  616. }
  617. // 导出提示框
  618. function decideExport() {
  619. $('#myModal').modal('toggle')
  620. }
  621. //导出
  622. function operation() {
  623. if (!$('#filename').val()) {
  624. layer.msg("请填写文件名!", { time: 2000 });
  625. return false;
  626. }
  627. window.location.href = 'siminfo_export?status=' + $('#status').val() + '&filename=' + $('#filename').val()
  628. }
  629. </script>
  630. </body>
  631. </html>