Fueltank.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>燃油管理</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  8. <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  9. <meta http-equiv="pragma" content="no-cache">
  10. <meta http-equiv="Cache" content="no-cache">
  11. <meta http-equiv="cache-control" content="no-cache, must-revalidate">
  12. <meta http-equiv="expires" content="0">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  14. <!--引入 element-ui 的样式,-->
  15. <link rel="stylesheet" href="../css/element.css">
  16. <link rel="stylesheet" href="../css/style.css">
  17. <link rel="stylesheet" type="text/css" href="../css/post.css"/>
  18. <script src="../js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
  19. <script src="../js/echarts.min.js" type="text/javascript" charset="utf-8"></script>
  20. <script src="../js/pako.js"></script>
  21. <script type="text/javascript">
  22. document.write('<script src="../js/yz/init.js?id='+(new Date().getTime())+'" type="text/javascript" charset="utf-8"><\/script>');
  23. document.write('<script src="../js/yz/shipLi.js?id='+(new Date().getTime())+'" type="text/javascript" charset="utf-8"><\/script>');
  24. document.write('<script src="../js/yz/defailt.js?id='+(new Date().getTime())+'" type="text/javascript" charset="utf-8"><\/script>');
  25. document.write('<script src="../js/yz/ajax.js?id='+(new Date().getTime())+'" type="text/javascript" charset="utf-8"><\/script>');
  26. document.write('<script src="../js/yz/configuration.js?id='+(new Date().getTime())+'" type="text/javascript" charset="utf-8"><\/script>');
  27. </script>
  28. <script>
  29. checkLogin();
  30. </script>
  31. <style>
  32. .searchDay{
  33. height: 28px;
  34. font-size: 14px;
  35. line-height: 28px;
  36. padding: 0 15px;
  37. cursor: pointer;
  38. border-radius: 4px;
  39. text-align: center;
  40. color: #fff;
  41. background-color: #5793f3;
  42. }
  43. .startDate{
  44. margin-right: 20px;
  45. border: 1px solid rgba(255,255,255,0.5);
  46. border-radius: 4px;
  47. background-color: rgba(255,255,255,0.2);
  48. }
  49. .startDate input{
  50. color: #fff;
  51. text-align: center;
  52. width: 120px;
  53. height: 28px;
  54. padding: 0;
  55. }
  56. .addOil{
  57. list-style: none;
  58. }
  59. .addOil>li{
  60. display: flex;
  61. color: #cecece;
  62. border-bottom: 1px solid rgba(255,255,255,0.5);
  63. }
  64. .addOil>li div{
  65. width: 17%;
  66. padding: 8px 0;
  67. word-wrap:break-word;
  68. word-break:break-all;
  69. border-right: 1px solid rgba(255,255,255,0.5);
  70. }
  71. .addOil>li div:first-child,.addOil>li div:last-child{
  72. width: 24.5%;
  73. }
  74. .addOil>li div:last-child{
  75. border-right: none;
  76. }
  77. #addOil{
  78. height: calc(100% - 35px);
  79. overflow-y: auto;
  80. }
  81. #ywHeig{
  82. height: 100%;
  83. width: 100%;
  84. display: flex;
  85. flex-wrap: wrap;
  86. text-align: center;
  87. }
  88. #ywHeig>div{
  89. width: 20%;
  90. height: 33.33%;
  91. display: flex;
  92. flex-direction: column;
  93. align-items: center;
  94. justify-content: center;
  95. }
  96. #notOilMan{
  97. display: none;
  98. align-items: center;
  99. justify-content: center;
  100. height:100%;
  101. font-size: 20px;
  102. font-weight: bold;
  103. color: rgba(255,255,255,0.5);
  104. }
  105. </style>
  106. </head>
  107. <body>
  108. <div style="height:100%;">
  109. <div id="hasOilMan" style="height:100%;">
  110. <div style="height:60px;padding:7.5px 7.5px 0;position: relative;">
  111. <div class="tabUl">
  112. <div data-open="0" class="act_this">实时存量</div>
  113. <div data-open="1">燃油记录</div>
  114. </div>
  115. <div style="position: absolute;bottom: 20px;right:20px;color: #fff;">
  116. 最后更新时间:<span id="endTime"></span>
  117. </div>
  118. </div>
  119. <div style="height:calc(100% - 60px);" id="actualOil">
  120. <div class="yz_clm15 text-center" style="height:100%;">
  121. <div class="yz_clm12" style="height:100%;">
  122. <div class="Sense">
  123. <div id="ywHeig">
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. <div style="height:calc(100% - 60px);display: none;" id="hisOil">
  130. <div class="yz_clm15 text-center" style="height:100%;">
  131. <div class="yz_clm7" style="height:100%;">
  132. <div class="Sense" style="width: 100%;height:100%;">
  133. <div style="height: 50px;" class="flex align-center justify-center">
  134. <div class="startDate">
  135. <input id="startDay" type="date"/>
  136. <span>至</span>
  137. <input id="endDay" type="date"/>
  138. </div>
  139. <div class="searchDay"><i class="iconfont icon-sousuo text-xs margin-right-xs"></i>查询</div>
  140. </div>
  141. <div id="myChart1" style="height:calc(100% - 80px);"></div>
  142. <div style="height: 30px;">燃油消耗:<span class="Num" id="oilConsume">112.3</span>KG</div>
  143. </div>
  144. </div>
  145. <div class="yz_clm5" style="height:100%;">
  146. <div class="Sense">
  147. <div class="text-center text-bold margin-bottom-sm">燃油加装记录</div>
  148. <div style="border: 1px solid rgba(255,255,255,0.5);height:calc(100% - 30px);">
  149. <ul class="addOil">
  150. <li style="color: #fff;">
  151. <div>经纬度位置</div>
  152. <div>加油前(kg)</div>
  153. <div>加油后(kg)</div>
  154. <div>加油量(kg)</div>
  155. <div>加油时间</div>
  156. </li>
  157. </ul>
  158. <ul class="addOil" id="addOil">
  159. <li class="justify-center padding-tb-sm">
  160. 暂无数据
  161. </li>
  162. </ul>
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. <div id="notOilMan">
  170. <span>当前船只暂无油耗记录!</span>
  171. </div>
  172. </div>
  173. </body>
  174. <script>
  175. var awData = {};
  176. var myChart1 = echarts.init(document.getElementById('myChart1'));
  177. var nowSn = localStorage.getItem("shipSn");
  178. var hasOilMan = true, oilKey = null, oilMax = {};
  179. window.addEventListener('message',(data)=>{
  180. initF(1);
  181. })
  182. $(document).ready(function(){
  183. let curDate = getDateStr(new Date());
  184. $("#startDay").val(curDate[0]);
  185. $("#endDay").val(curDate[6]);
  186. initF()
  187. })
  188. function initF(num){
  189. nowSn = localStorage.getItem("shipSn");
  190. getOilYwei();
  191. }
  192. $(window).resize(function(){
  193. myChart1.resize();
  194. })
  195. function getOilYwei(){
  196. tokenAjax({
  197. url:"/volumeX2/volumeX2/getVolumList/"+nowSn,
  198. type:"GET"
  199. },{})
  200. .then(function(res){
  201. if(res.code == 200&&res.data.length){
  202. oilKey = res.data;
  203. if(!hasOilMan){
  204. $("#hasOilMan").css("display","block");
  205. $("#notOilMan").css("display","none");
  206. hasOilMan = true;
  207. }
  208. firstData(0);
  209. getOils();
  210. // getOilTable();
  211. }else{
  212. oilKey = null;
  213. oilMax = {};
  214. if(hasOilMan){
  215. $("#hasOilMan").css("display","none");
  216. $("#notOilMan").css("display","flex");
  217. hasOilMan = false;
  218. }
  219. }
  220. })
  221. }
  222. function firstData(_num){
  223. if(_num == 0){yzkj.load("load1")};
  224. setTimeout(()=>{
  225. deviceList(function acb(_data){
  226. setView(_data);
  227. $("#endTime").text(_data["time"])
  228. if(_num == 0){yzkj.closeLoad("load1");}
  229. if(_data.mmsi == undefined){
  230. // setTimeout(()=>{
  231. // firstData(1);
  232. // },60*1000)
  233. }
  234. })
  235. },100)
  236. }
  237. function setView(_obj){
  238. awData = _obj;
  239. let _arr = [];
  240. oilKey.forEach(item => {
  241. let _ah = (awData[item.volumeName] == undefined? 0 : (parseFloat(awData[item.volumeName])*(250/4096))/100).toFixed(2)
  242. item.level = parseFloat(_ah)>parseFloat(item.volumeLevelMax)?item.volumeLevelMax:_ah;
  243. oilMax[item.volumeNameId] = item.volumeLevelMax;
  244. });
  245. tokenPostAjax({
  246. url:"/volumeX2/volumeX2/getData",
  247. type:"POST"
  248. },{
  249. refresh:"1",
  250. sn: nowSn,
  251. list: oilKey
  252. })
  253. .then(function(res){
  254. if(res.code == 200&&res.data.length){
  255. setYWei(res.data);
  256. }
  257. })
  258. }
  259. // 创新液位
  260. function setYWei(_obj){
  261. let _str = "";
  262. for(let i=1;i<_obj.length;i++){
  263. let _ab = _obj[i];
  264. let _cd = parseFloat(oilMax[_ab.volumeNameId]);
  265. let _heg = parseInt((parseFloat(_ab.level)/_cd)*100)>100?100:parseInt((parseFloat(_ab.level)/_cd)*100);
  266. let _spa = _heg<19?0:"calc("+_heg+"% - 24px)";
  267. let _range = getRange(_cd);
  268. _str += `<div>
  269. <div>${_ab.name}(<span class="Num" style="font-size: 1.1rem;">${_ab.capacity}</span> L)</div>
  270. <div class="margin-tb-sm flex">
  271. <div class="Range">
  272. <span>${_range[0]}</span>
  273. <span>${_range[1]}</span>
  274. <span>${_range[2]}</span>
  275. <span>${_range[3]}</span>
  276. <span>0</span>
  277. </div>
  278. <div class="Liquidli">
  279. <div style="height:${_heg}%;"></div>
  280. <span style="bottom:${_spa};">${_ab.level}<i>m</i></span>
  281. </div>
  282. </div>
  283. <div style="color:#ccc;">重量:<span class="Num" style="font-size: 1.1rem;">${_ab.weight}</span> kg</div>
  284. </div>`
  285. }
  286. $("#ywHeig").html(_str);
  287. }
  288. function getRange(key){
  289. let _id = parseFloat(key) / 4;
  290. let reg = /^(-?\d+)(\.\d{1,2})?$/;
  291. let one = (reg.test(_id*1))?(_id*1):(_id*1).toFixed(2);
  292. let two = (reg.test(_id*2))?(_id*2):(_id*2).toFixed(2);
  293. let thr = (reg.test(_id*3))?(_id*3):(_id*3).toFixed(2);
  294. let foru = (reg.test(_id*4))?(_id*4):(_id*4).toFixed(2);
  295. return [foru, thr, two, one];
  296. }
  297. // 获取近七天时间
  298. function getDateStr(date) {
  299. var base = new Date(date).getTime();
  300. // var base = 1643039999000;
  301. var oneDay = 24 * 3600 * 1000;
  302. var date = [];
  303. var data = [Math.random() * 300];
  304. var time = new Date(base);
  305. date.push([time.getFullYear(), ((time.getMonth() + 1)>9?(time.getMonth() + 1):"0"+(time.getMonth() + 1)), (time.getDate()>9?time.getDate():"0"+time.getDate())].join('-'));
  306. for (var i = 1; i <7; i++) {
  307. var now = new Date(base -= oneDay);
  308. date.push([now.getFullYear(), ((now.getMonth() + 1)>9?(now.getMonth() + 1):"0"+(now.getMonth() + 1)), (now.getDate()>9?now.getDate():"0"+now.getDate())].join('-'));
  309. data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
  310. }
  311. var newdate = date.reverse()
  312. return newdate;
  313. }
  314. $(".searchDay").on("click","",function(){
  315. let _star = $("#startDay").val();
  316. let _end = $("#endDay").val();
  317. if(_star == ""||_end == ""){
  318. ShowLoading("请选择查询时间!",1);
  319. return;
  320. }
  321. if(parseFloat(_star.replace(/-/g,""))>parseFloat(_end.replace(/-/g,""))){
  322. ShowLoading("请检查时间顺序!",1);
  323. return;
  324. }
  325. getOils();
  326. getOilTable();
  327. })
  328. var optionData = {}, optionSelc = {};
  329. function getOils(){
  330. let _star = $("#startDay").val();
  331. let _end = $("#endDay").val();
  332. tokenPostAjax({
  333. url:"/consumption/consumption/getChange",
  334. type:"POST"
  335. },{
  336. sn: nowSn,
  337. beginDate: _star,
  338. endDate: _end
  339. })
  340. .then(function(res){
  341. if(res.code == 200&&res.data != undefined){
  342. optionData = res.data;
  343. }else{
  344. optionData = {
  345. allNums: "---",
  346. data: [],
  347. xAxis: []
  348. };
  349. }
  350. optionSelc = getSelc(optionData.data);
  351. myChart1.setOption(setOptions(optionData, optionSelc));
  352. $("#oilConsume").text((isNaN(Number(optionData.allNums,10))?0:parseFloat(optionData.allNums).toFixed(2)));
  353. })
  354. }
  355. function getOilTable(){
  356. let _star = $("#startDay").val();
  357. let _end = $("#endDay").val();
  358. tokenAjax({
  359. url:"/fuelCharging/fuelCharging/list",
  360. type:"GET"
  361. },{
  362. sn: nowSn,
  363. beginDate: _star,
  364. endDate: _end
  365. })
  366. .then(function(res){
  367. let _str = "";
  368. if(res.code == 200&&res.rows.length){
  369. let sdn = res.rows;
  370. for(let i=0;i<sdn.length;i++){
  371. _str += `<li>
  372. <div>${sdn[i].ais}</div>
  373. <div>${parseFloat(sdn[i].dataMin).toFixed(2)}</div>
  374. <div>${parseFloat(sdn[i].dataMax).toFixed(2)}</div>
  375. <div>${parseFloat(sdn[i].fuelChargingQuantity).toFixed(2)}</div>
  376. <div>${sdn[i].establishDate}</div>
  377. </li>`;
  378. }
  379. }else{
  380. _str = `<li class="justify-center padding-tb-sm">
  381. 暂无数据
  382. </li>`
  383. }
  384. $("#addOil").html(_str);
  385. })
  386. }
  387. function getSelc(adj){
  388. let sid = {};
  389. adj.forEach((item,index) => {
  390. sid[item.name] = (item.name.indexOf("总量") != -1?true:false)
  391. })
  392. return sid;
  393. }
  394. myChart1.on('legendselectchanged', function(obj) {
  395. var selected = obj.selected;
  396. for(var key in optionSelc){
  397. if(key == obj.name){
  398. optionSelc[key] = optionSelc[key]?false:true;
  399. }
  400. }
  401. myChart1.setOption(setOptions(optionData, optionSelc));
  402. });
  403. function setOptions(_obj, _sel){
  404. let option = {
  405. tooltip: {
  406. trigger: 'axis'
  407. },
  408. legend: {
  409. textStyle: {
  410. color: "#b9b9b9"
  411. },
  412. selected: _sel
  413. },
  414. grid: {
  415. top: _obj.data.length>7?'18%':'8%',
  416. left: '1%',
  417. right: '2%',
  418. bottom: '2%',
  419. containLabel: true
  420. },
  421. xAxis: {
  422. type: 'category',
  423. boundaryGap: true,
  424. splitLine: {
  425. show: true,
  426. lineStyle: {
  427. color: '#29437c'
  428. }
  429. },
  430. axisLabel: {
  431. color: '#d6d6d6',
  432. fontSize: 12,
  433. showMaxLabel: true
  434. },
  435. data: _obj.xAxis
  436. },
  437. yAxis: {
  438. type: 'value',
  439. axisLabel: {
  440. fontSize: 12,
  441. color:"#5f6ee1",
  442. showMaxLabel: true
  443. },
  444. axisLine: {
  445. show: true,
  446. lineStyle: {
  447. color: ['#5f6ee1']
  448. }
  449. },
  450. splitLine: {
  451. show: true,
  452. lineStyle: {
  453. color: ['#29437c']
  454. }
  455. }
  456. },
  457. series: _obj.data
  458. };
  459. return option
  460. }
  461. $(".tabUl div").on("click","",function(){
  462. whoShow($(this).data("open"));
  463. })
  464. function whoShow(_id){
  465. $(".tabUl>div").removeClass("act_this");
  466. $(".tabUl>div[data-open='"+_id+"']").addClass("act_this");
  467. let _sta = ["block","none"];
  468. if(_id == 0){
  469. _sta = ["block","none"];
  470. }else if(_id == 1){
  471. _sta = ["none","block"];
  472. }
  473. $("#actualOil").css("display",_sta[0]);
  474. $("#hisOil").css("display",_sta[1]);
  475. myChart1.resize();
  476. };
  477. </script>
  478. </html>