Nozzles.cshtml 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. @*
  2. For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
  3. *@
  4. @{
  5. Layout = null;
  6. }
  7. @model Applications.UniversalApi_WebConsole_App.Models.OnlineMonitor.OnlineMonitorInfo
  8. @{
  9. int screenWidth = 1280;
  10. int mainviewHeight = 570;
  11. int maxNozzleNumberInOnePage = 12;
  12. int maxNozzlewidth = 176;
  13. int minNozzlewidth = 129;
  14. //including the right margin at the end of a row,current display 6 nozzles in one row
  15. int marginleft = (screenWidth - maxNozzlewidth * 6) / 7;
  16. int nozzleHeight = 259;
  17. int margintop = (mainviewHeight - nozzleHeight * 2) / 3;
  18. int textlableHeight = 34;//人民币未付款图标高度/宽度
  19. int nozzleImagHeight = 123;
  20. int lableFontSize = 22;
  21. int imgPaidHeight = 25;
  22. int imgPaidWidth = 20;
  23. int alImgWidth = 44;
  24. int alImgHeight = 43;
  25. int headRightHeight = 44;
  26. int alLogoWidth = 61;
  27. int smartFuelLogoWidth = 43;
  28. int alLogoTop = 0;
  29. //int alLogoTop = headRightHeight + 10;
  30. string imgPrePath = "/images/onlineMonitor/nozzleView/";
  31. }
  32. <script>
  33. var currentPage = 1;
  34. var oldPage = currentPage;
  35. var totalPage = 1;
  36. var currentView = "AL";
  37. //var alLogoVisibility = currentView === "AL" ? "hidden" : "visible";
  38. //var smartFuelLogoVisibility = currentView === "SmartFuel" ? "hidden" : "visible";
  39. var alLogoVisibility = "hidden";
  40. var smartFuelLogoVisibility = "hidden";
  41. var warningNozzles = new Array();
  42. var alarmNozzles = new Array();
  43. //Generate AL nozzle view according messages got from mqtt
  44. function GenerateNozzleView(message) {
  45. var nozzlesDiv = document.getElementById("nozzles");
  46. if (nozzlesDiv == null) {
  47. console.log("nozzles div is null");
  48. return;
  49. }
  50. if (message == null || message.data == null) {
  51. console.log("Invalid message received for GenerateNozzleView");
  52. return;
  53. }
  54. if (warningNozzles.length > 0) {
  55. warningNozzles.splice(0,warningNozzles.length);
  56. }
  57. if (alarmNozzles.length > 0) {
  58. alarmNozzles.splice(0,alarmNozzles.length);
  59. }
  60. totalPage = Math.ceil(message.data.length / @(maxNozzleNumberInOnePage));// +(message.data.length % (@maxNozzleNumberInOnePage) === 0 ? 0 : 1);
  61. if (currentPage > totalPage) {
  62. currentPage = totalPage;
  63. console.log("configuration changed???");
  64. }
  65. message.data.forEach(function(d) {
  66. if (d.VrState === "WARNING") {
  67. warningNozzles.push(d.SiteLevelDispenserId);
  68. } else if (d.VrState === "ALARM") {
  69. alarmNozzles.push(d.SiteLevelDispenserId);
  70. }
  71. });
  72. var dataLength =
  73. (message.data.length - @maxNozzleNumberInOnePage * (currentPage - 1)) > @maxNozzleNumberInOnePage
  74. ? @maxNozzleNumberInOnePage
  75. : (message.data.length - @maxNozzleNumberInOnePage * (currentPage - 1));
  76. //test
  77. //var temp1 = message.data.slice(2,3);
  78. var temp = message.data.slice(@maxNozzleNumberInOnePage * (currentPage - 1), @maxNozzleNumberInOnePage * (currentPage - 1)+dataLength);
  79. temp.forEach(function(d) {
  80. var nozzleDiv = document.createElement("div");
  81. nozzleDiv.id = "nozzle_" + d.SiteLevelNozzleId;
  82. nozzleDiv.style =
  83. "position:relative; float: left;margin-left:"+@marginleft+"px; margin-top:" +@(margintop)+"px; width:" +@(maxNozzlewidth)+"px; height:"+@(nozzleHeight)+"px;";
  84. var nozzleIdDiv = document.createElement("div");
  85. nozzleIdDiv.id = "nozzleId_" + d.SiteLevelNozzleId;
  86. nozzleIdDiv.style =
  87. "position: relative; float:left;width: 100%; height:"+@(textlableHeight)+"px; text-align: left; font-size: 22px;font-weight: bold";
  88. nozzleIdDiv.innerHTML = d.SiteLevelNozzleId;
  89. var nozzleImgDiv = document.createElement("div");
  90. nozzleImgDiv.id = "nozzleImg_" + d.SiteLevelNozzleId;
  91. nozzleImgDiv.style = "position: relative; float: left;width: 100%; height:" +@(nozzleImagHeight)+"px; text-align: center;";
  92. var fuelingStatusIdleVisible = (d.FuelingStatus === "IDLE") ? "visible" : "hidden";
  93. var fuelingStatusFuellingVisible = (d.FuelingStatus === "FUELING") ? "visible" : "hidden";
  94. //对于油气回收来说目前只有两个状态IDLE,FUELLING
  95. var imgIdle = document.createElement("img");
  96. imgIdle.id = "nozzleImage_Idle_" + d.SiteLevelNozzleId;
  97. imgIdle.style = "visibility:" + fuelingStatusIdleVisible;
  98. imgIdle.src = "@(imgPrePath)IDEL.png";
  99. var imgFuelling = document.createElement("img");
  100. imgFuelling.id = "nozzleImage_Fuelling_" + d.SiteLevelNozzleId;
  101. imgFuelling.style = "position: absolute; left: 0px;visibility:"+fuelingStatusFuellingVisible;
  102. imgFuelling.src = "@(imgPrePath)Fuelling.png";
  103. var alImgNormalVisible = (d.FuelingStatus === "IDLE" && d.VrState === "NORMAL") ? "visible" : "hidden";
  104. var alImgWarningVisible = (d.FuelingStatus === "IDLE" && d.VrState ==="WARNING")? "visible" : "hidden";
  105. var alImgAlarmVisible = (d.FuelingStatus === "IDLE" && d.VrState ==="ALARM")? "visible" : "hidden";
  106. var alImgDisconnectVisible = (d.FuelingStatus === "IDLE" && d.VrState ==="DISCONNETED")? "visible" : "hidden";
  107. var imgAlNormal = document.createElement("img");
  108. imgAlNormal.id = "nozzleALImage_Normal_" + d.SiteLevelNozzleId;
  109. imgAlNormal.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgNormalVisible+";";
  110. imgAlNormal.src = "@(imgPrePath)NozzleALNormal.png";
  111. var imgAlWarning = document.createElement("img");
  112. imgAlWarning.id = "nozzleALImage_Warning_" + d.SiteLevelNozzleId;
  113. imgAlWarning.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgWarningVisible+";";
  114. imgAlWarning.src = "@(imgPrePath)NozzleALWarning.png";
  115. var imgAlAlarm = document.createElement("img");
  116. imgAlAlarm.id = "nozzleALImage_Alarm_" + d.SiteLevelNozzleId;
  117. imgAlAlarm.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgAlarmVisible+";";
  118. imgAlAlarm.src = "@(imgPrePath)NozzleALAlarm.png";
  119. var imgAlDisconnect = document.createElement("img");
  120. imgAlDisconnect.id = "nozzleALImage_Disconnect_" + d.SiteLevelNozzleId;
  121. imgAlDisconnect.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgDisconnectVisible+";";
  122. imgAlDisconnect.src = "@(imgPrePath)NozzleALDisconnect.png";
  123. nozzleImgDiv.appendChild(imgIdle);
  124. nozzleImgDiv.appendChild(imgFuelling);
  125. nozzleImgDiv.appendChild(imgAlNormal);
  126. nozzleImgDiv.appendChild(imgAlWarning);
  127. nozzleImgDiv.appendChild(imgAlAlarm);
  128. nozzleImgDiv.appendChild(imgAlDisconnect);
  129. //油气回收界面只有气(升)、液(加油升数)、汽液比值;现只添加三个div即可
  130. var nozzleGasDiv = document.createElement("div");
  131. nozzleGasDiv.id = "nozzleGas_" + d.SiteLevelNozzleId;
  132. nozzleGasDiv.style = "position: relative; float: left;width: 100%; height:" +@(textlableHeight)+"px; font-size:22px; font-weight: bold;";
  133. nozzleGasDiv.innerHTML = "气:"+d.VaporVolume;
  134. var nozzleLiterDiv = document.createElement("div");
  135. nozzleLiterDiv.id = "nozzleLiter_" + d.SiteLevelNozzleId;
  136. nozzleLiterDiv.style = "position: relative; float: left;width: 100%; height:" +@(textlableHeight)+"px; font-size:22px; font-weight: bold;";
  137. nozzleLiterDiv.innerHTML = "升:"+d.LiquidVolume;
  138. var nozzleAlDiv = document.createElement("div");
  139. nozzleAlDiv.id = "nozzleAL_" + d.SiteLevelNozzleId;
  140. nozzleAlDiv.style = "position: relative; float: left;width: 100%; height:" +@(textlableHeight)+"px; font-size:22px; font-weight: bold;";
  141. nozzleAlDiv.innerHTML = "气液比 "+d.VaporLiquidRatio;
  142. nozzleDiv.appendChild(nozzleIdDiv);
  143. nozzleDiv.appendChild(nozzleImgDiv);
  144. nozzleDiv.appendChild(nozzleGasDiv);
  145. nozzleDiv.appendChild(nozzleLiterDiv);
  146. nozzleDiv.appendChild(nozzleAlDiv);
  147. nozzlesDiv.appendChild(nozzleDiv);
  148. });
  149. UpdateHeadMessage();
  150. UpdateFooterPage();
  151. }
  152. function UpdateFooterPage() {
  153. if (document.getElementById("PumpsPage_Bottom_pages") != null) {
  154. for (var p = 1; p < 6; p++) {
  155. var imgCurrentPageIdStr = "PumpsPage_Bottom_pages_img_"+p;
  156. var imgCurrentPageNotShowedIdStr = "PumpsPage_Bottom_pages_notshowed_img_"+p;
  157. if (p > totalPage) {
  158. if (document.getElementById(imgCurrentPageIdStr) != null)
  159. document.getElementById(imgCurrentPageIdStr).style.visibility = "hidden";
  160. if (document.getElementById(imgCurrentPageNotShowedIdStr) != null)
  161. document.getElementById(imgCurrentPageNotShowedIdStr).style.visibility = "hidden";
  162. } else if (p === currentPage || (p === 5 && totalPage > p)) {
  163. if (document.getElementById(imgCurrentPageIdStr) != null)
  164. document.getElementById(imgCurrentPageIdStr).style.visibility = "visible";
  165. if (document.getElementById(imgCurrentPageNotShowedIdStr) != null)
  166. document.getElementById(imgCurrentPageNotShowedIdStr).style.visibility = "hidden";
  167. }else {
  168. if (document.getElementById(imgCurrentPageIdStr) != null)
  169. document.getElementById(imgCurrentPageIdStr).style.visibility = "hidden";
  170. if (document.getElementById(imgCurrentPageNotShowedIdStr) != null)
  171. document.getElementById(imgCurrentPageNotShowedIdStr).style.visibility = "visible";
  172. }
  173. }
  174. }
  175. }
  176. function ClearOldItems() {
  177. var nozzlesDiv = document.getElementById("nozzles");
  178. if (nozzlesDiv != null) {
  179. for (var cl = 1; cl < @(maxNozzleNumberInOnePage+1); cl++) {
  180. var ocn = document.getElementById("nozzle_" + (cl+@(maxNozzleNumberInOnePage)*(currentPage-1)));
  181. if (ocn != null) nozzlesDiv.removeChild(ocn);
  182. }
  183. }
  184. }
  185. function UpdateVrState(message) {
  186. if (message != null && message.NozzleStatus != null && message.NozzleStatus.data != null) {
  187. message.NozzleStatus.data.forEach(
  188. function (d) {
  189. var nozzleId = d.SiteLevelNozzleId;
  190. if (!(warningNozzles.indexOf(nozzleId) < 0)) {
  191. if (d.VrState !== "WARNING")
  192. warningNozzles.splice(warningNozzles.indexOf(nozzleId), 1);
  193. } else if (!(alarmNozzles.indexOf(nozzleId) < 0)) {
  194. if (d.VrState !== "ALARM")
  195. alarmNozzles.splice(alarmNozzles.indexOf(nozzleId), 1);
  196. }
  197. if (d.VrState === "WARNING" && warningNozzles.indexOf(nozzleId)<0) warningNozzles.push(nozzleId);
  198. else if (d.VrState === "ALARM" && alarmNozzles.indexOf(nozzleId) < 0) alarmNozzles.push(nozzleId);
  199. var nozzleDiv = document.getElementById("nozzle_" + nozzleId);
  200. if (nozzleDiv != null) {
  201. var fuelingStatusIdleVisible = (d.FuelingStatus === "IDLE") ? "visible" : "hidden";
  202. var fuelingStatusFuellingVisible = (d.FuelingStatus === "FUELING") ? "visible" : "hidden";
  203. var nozzleImgIdle = document.getElementById("nozzleImage_Idle_" + d.SiteLevelNozzleId);
  204. var nozzleImgFulling = document.getElementById("nozzleImage_Fuelling_" + d.SiteLevelNozzleId);
  205. if (nozzleImgIdle != null) nozzleImgIdle.style.visibility = fuelingStatusIdleVisible;
  206. if (nozzleImgFulling != null) nozzleImgFulling.style.visibility = fuelingStatusFuellingVisible;
  207. var alImgNormalVisible = (d.FuelingStatus === "IDLE" && d.VrState === "NORMAL") ? "visible" : "hidden";
  208. var alImgWarningVisible = (d.FuelingStatus === "IDLE" && d.VrState ==="WARNING")? "visible" : "hidden";
  209. var alImgAlarmVisible = (d.FuelingStatus === "IDLE" && d.VrState ==="ALARM")? "visible" : "hidden";
  210. var alImgDisconnectVisible = (d.FuelingStatus === "IDLE" && d.VrState === "DISCONNETED") ? "visible" : "hidden";
  211. if(document.getElementById("nozzleALImage_Normal_"+d.SiteLevelNozzleId)!=null)document.getElementById("nozzleALImage_Normal_"+d.SiteLevelNozzleId).style.visibility=alImgNormalVisible;
  212. if (document.getElementById("nozzleALImage_Warning_"+d.SiteLevelNozzleId) != null) document.getElementById("nozzleALImage_Warning_"+d.SiteLevelNozzleId).style.visibility =alImgWarningVisible;
  213. if (document.getElementById("nozzleALImage_Alarm_"+d.SiteLevelNozzleId) != null) document.getElementById("nozzleALImage_Alarm_"+d.SiteLevelNozzleId).style.visibility =alImgAlarmVisible;
  214. if(document.getElementById("nozzleALImage_Disconnect_"+d.SiteLevelNozzleId)!=null)document.getElementById("nozzleALImage_Disconnect_"+d.SiteLevelNozzleId).style.visibility=alImgDisconnectVisible;
  215. if (document.getElementById("nozzleGas_" + d.SiteLevelNozzleId) != null)
  216. document.getElementById("nozzleGas_" + d.SiteLevelNozzleId).innerHTML = "气:" + d.VaporVolume;
  217. if (document.getElementById("nozzleLiter_" + d.SiteLevelNozzleId) != null)
  218. document.getElementById("nozzleLiter_" + d.SiteLevelNozzleId).innerHTML = "升:" + d.LiquidVolume;
  219. if (document.getElementById("nozzleAL_" + d.SiteLevelNozzleId) != null)
  220. document.getElementById("nozzleAL_" + d.SiteLevelNozzleId).innerHTML = "气液比 " + d.VaporLiquidRatio;
  221. } else {
  222. console.log("nozzle:"+nozzleId+" is not exist on web UI");
  223. }
  224. });
  225. UpdateHeadMessage();
  226. } else {
  227. console.log("Invalid vr state change envent received");
  228. }
  229. }
  230. //Generate nozzle view for smart fuel
  231. function GenerateSmartFuelNozzleView(message) {
  232. var nozzlesDiv = document.getElementById("nozzles");
  233. @*for (var cl = 0; cl < @maxNozzleNumberInOnePage; cl++) {
  234. var ocn = document.getElementById("nozzle_" + (cl+@(maxNozzleNumberInOnePage)*(oldPage-1)+1));
  235. if (ocn != null) nozzlesDiv.removeChild(ocn);
  236. }*@
  237. if (nozzlesDiv == null) {
  238. console.log("nozzles div is null");
  239. return;
  240. }
  241. if (message == null || message.data == null) {
  242. console.log("Invalid message received for GenerateNozzleView");
  243. return;
  244. }
  245. totalPage = Math.ceil(message.data.length / @(maxNozzleNumberInOnePage));//message.data.length / @(maxNozzleNumberInOnePage)+(message.data.length % (@maxNozzleNumberInOnePage) === 0 ? 0 : 1);
  246. if (currentPage > totalPage) {
  247. currentPage = totalPage;
  248. console.log("configuration changed???");
  249. }
  250. var dataLength =
  251. (message.data.length - @maxNozzleNumberInOnePage * (currentPage - 1)) > @maxNozzleNumberInOnePage
  252. ? @maxNozzleNumberInOnePage
  253. : (message.data.length - @maxNozzleNumberInOnePage * (currentPage - 1));
  254. var temp = message.data.slice(@maxNozzleNumberInOnePage * (currentPage - 1), @maxNozzleNumberInOnePage * (currentPage - 1)+dataLength);
  255. temp.forEach(function (d) {
  256. var nozzleId = d.SiteLevelNozzleId;
  257. var nozzleDiv = document.createElement("div");
  258. nozzleDiv.id = "nozzle_" + nozzleId;
  259. nozzleDiv.style =
  260. "position:relative; float: left;margin-left:"+@marginleft+"px; margin-top:" +@(margintop)+"px; width:" +@(maxNozzlewidth)+"px; height:"+@(nozzleHeight)+"px;";
  261. var nozzleIdDiv = document.createElement("div");
  262. nozzleIdDiv.id = "nozzleId_" + nozzleId;
  263. nozzleIdDiv.style =
  264. "position: relative; float:left;width: 100%; height:"+@(textlableHeight)+"px; text-align: left; font-size: 22px;font-weight: bold";
  265. nozzleIdDiv.innerHTML = nozzleId;
  266. var nozzleImgDiv = document.createElement("div");
  267. nozzleImgDiv.id = "nozzleImg_" + nozzleId;
  268. nozzleImgDiv.style = "position: relative; float: left;width: 100%; height:" +@(nozzleImagHeight)+"px; text-align: center;";
  269. //油枪状态图
  270. var fuelingStatusIdleVisible = (d.FuelingStatus === "IDLE") ? "visible" : "hidden";
  271. var fuelingStatusFuellingVisible = (d.FuelingStatus === "FUELING") ? "visible" : "hidden";
  272. var fuelingStatusCallingVisible = "hidden";
  273. var fuelingStatusAuthrizedVisible = "hidden";
  274. var fuelingStatusDisconnectVisible = "hidden";
  275. var fuelingStatusClosedVisible = "hidden";
  276. //IDLE,CALLING,AUTHORIZED,FUELLING,DISCONNECT,油枪未连接
  277. var imgIdle = document.createElement("img");
  278. imgIdle.id = "nozzleImage_Idle_" + nozzleId;
  279. imgIdle.style = "visibility:" + fuelingStatusIdleVisible;
  280. imgIdle.src = "@(imgPrePath)IDEL.png";
  281. var imgCalling = document.createElement("img");
  282. imgCalling.id = "nozzleImage_Calling_" + nozzleId;
  283. imgCalling.style = "position: absolute; top: 0px; left:"+@((maxNozzlewidth-minNozzlewidth)/2)+"px;visibility:" + fuelingStatusCallingVisible+";";
  284. imgCalling.src ="@(imgPrePath)CALLING.png";
  285. var imgAuthorized= document.createElement("img");
  286. imgAuthorized.id = "nozzleImage_Authorized_" + nozzleId;
  287. imgAuthorized.style = "position: absolute; top: 0px; left:"+@((maxNozzlewidth-minNozzlewidth)/2)+"px;visibility:" + fuelingStatusAuthrizedVisible+";";
  288. imgAuthorized.src = "@(imgPrePath)Authorize.png";
  289. var imgFuelling = document.createElement("img");
  290. imgFuelling.id = "nozzleImage_Fuelling_" + nozzleId;
  291. imgFuelling.style = "position: absolute; left: 0px;visibility:"+fuelingStatusFuellingVisible;
  292. imgFuelling.src ="@(imgPrePath)Fuelling.png";
  293. var imgDisconnect= document.createElement("img");
  294. imgDisconnect.id = "nozzleImage_Disconnect_" + nozzleId;
  295. imgDisconnect.style = "position: absolute; top: 0px; left:"+@((maxNozzlewidth-minNozzlewidth)/2)+"px;visibility:" + fuelingStatusDisconnectVisible+";";
  296. imgDisconnect.src = "@(imgPrePath)Offline.png";
  297. var imgClosed= document.createElement("img");
  298. imgClosed.id = "nozzleImage_Closed_" + nozzleId;
  299. imgClosed.style = "position: absolute; top: 0px; left:"+@((maxNozzlewidth-minNozzlewidth)/2)+"px;visibility:" + fuelingStatusClosedVisible+";";
  300. imgClosed.src = "@(imgPrePath)Closed.png";
  301. //加油界面油气回收图标暂时都隐藏,之后根据油气回收的消息更新界面
  302. var alImgNormalVisible = "hidden";
  303. var alImgWarningVisible = "hidden";
  304. var alImgAlarmVisible = "hidden";
  305. var alImgDisconnectVisible = "hidden";
  306. var imgAlNormal = document.createElement("img");
  307. imgAlNormal.id = "nozzleALImage_Normal_" + nozzleId;
  308. imgAlNormal.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgNormalVisible+";";
  309. imgAlNormal.src = "@(imgPrePath)NozzleALNormal.png";
  310. var imgAlWarning = document.createElement("img");
  311. imgAlWarning.id = "nozzleALImage_Warning_" + nozzleId;
  312. imgAlWarning.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgWarningVisible+";";
  313. imgAlWarning.src ="@(imgPrePath)NozzleALWarning.png";
  314. var imgAlAlarm = document.createElement("img");
  315. imgAlAlarm.id = "nozzleALImage_Alarm_" + nozzleId;
  316. imgAlAlarm.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgAlarmVisible+";";
  317. imgAlAlarm.src = "@(imgPrePath)NozzleALAlarm.png";
  318. var imgAlDisconnect = document.createElement("img");
  319. imgAlDisconnect.id = "nozzleALImage_Disconnect_" + nozzleId;
  320. imgAlDisconnect.style = "position: absolute; top:"+@(nozzleImagHeight-alImgHeight)+"px; left:"+@(maxNozzlewidth-alImgWidth)+"px;visibility:"+alImgDisconnectVisible+";";
  321. imgAlDisconnect.src = "@(imgPrePath)NozzleALDisconnect.png";
  322. nozzleImgDiv.appendChild(imgIdle);
  323. nozzleImgDiv.appendChild(imgCalling);
  324. nozzleImgDiv.appendChild(imgAuthorized);
  325. nozzleImgDiv.appendChild(imgFuelling);
  326. nozzleImgDiv.appendChild(imgDisconnect);
  327. nozzleImgDiv.appendChild(imgClosed);
  328. nozzleImgDiv.appendChild(imgAlNormal);
  329. nozzleImgDiv.appendChild(imgAlWarning);
  330. nozzleImgDiv.appendChild(imgAlAlarm);
  331. nozzleImgDiv.appendChild(imgAlDisconnect);
  332. var imgNotPaidVisible = "visible";
  333. var imgPaidVisible = "visible";
  334. var nozzleAmountDiv = document.createElement("div");
  335. nozzleAmountDiv.id = "nozzleAmount_" + nozzleId;
  336. nozzleAmountDiv.style = "position: relative; float: left;width: 100%; height:" +@(textlableHeight)+"px;";
  337. var nozzleAmountImgDiv = document.createElement("div");
  338. nozzleAmountImgDiv.id = "nozzleAmount_img_"+nozzleId;
  339. nozzleAmountImgDiv.style = "position: relative;float: left;width:" +@(textlableHeight)+"px; height:100%;";
  340. var nozzleAmountUnpaidImg = document.createElement("img");
  341. nozzleAmountUnpaidImg.id = "nozzleAmount_img_Unpaid_" + nozzleId;
  342. nozzleAmountUnpaidImg.style = "visibility:"+imgNotPaidVisible;
  343. nozzleAmountUnpaidImg.src = "@(imgPrePath)Payable.png";
  344. var nozzleAmountPaidImg = document.createElement("img");
  345. nozzleAmountPaidImg.id = "nozzleAmount_img_Paid_" + nozzleId;
  346. nozzleAmountPaidImg.style = "position: absolute; top:"+@((textlableHeight-imgPaidHeight)/2)+"px; left:"+@((textlableHeight-imgPaidWidth)/2)+"px;visibility:"+imgPaidVisible+";";
  347. nozzleAmountPaidImg.src = "@(imgPrePath)Paid.png";
  348. nozzleAmountImgDiv.appendChild(nozzleAmountUnpaidImg);
  349. nozzleAmountImgDiv.appendChild(nozzleAmountPaidImg);
  350. var nozzleAmountValueDiv = document.createElement("div");
  351. nozzleAmountValueDiv.id = "nozzleAmount_value_" + nozzleId;
  352. nozzleAmountValueDiv.style = "position: relative;float: left;width:" +@(maxNozzlewidth-textlableHeight)+"px; height:100%;";
  353. nozzleAmountValueDiv.innerHTML = " :"+"12345.00";
  354. nozzleAmountDiv.appendChild(nozzleAmountImgDiv);
  355. nozzleAmountDiv.appendChild(nozzleAmountValueDiv);
  356. var nozzleAccumulatorTextDiv = document.createElement("div");
  357. nozzleAccumulatorTextDiv.id = "nozzleAccumulatorText_" + nozzleId;
  358. nozzleAccumulatorTextDiv.style = "position: relative; float: left;width: 100%; height:" +@(textlableHeight)+"px; font-size:22px; font-weight: bold;";
  359. nozzleAccumulatorTextDiv.innerHTML = "累计数:";
  360. var nozzleAccumulatorValueDiv = document.createElement("div");
  361. nozzleAccumulatorValueDiv.id = "nozzleAccumulatorValue_" + nozzleId;
  362. nozzleAccumulatorValueDiv.style = "position: relative; float: left;width: 100%; height:" +@(textlableHeight)+"px; font-size:22px; font-weight: bold;";
  363. nozzleAccumulatorValueDiv.innerHTML = "1234567.0000";
  364. nozzleDiv.appendChild(nozzleIdDiv);
  365. nozzleDiv.appendChild(nozzleImgDiv);
  366. nozzleDiv.appendChild(nozzleAmountDiv);
  367. nozzleDiv.appendChild(nozzleAccumulatorTextDiv);
  368. nozzleDiv.appendChild(nozzleAmountValueDiv);
  369. nozzlesDiv.appendChild(nozzleDiv);
  370. });
  371. UpdateFooterPage();
  372. }
  373. //Update the message on header
  374. function UpdateHeadMessage() {
  375. var pumpsHead = document.getElementById("PumpsPage_Head");
  376. var normalHead = document.getElementById("PumpsPage_Head_Status_normal");
  377. var warningHead = document.getElementById("PumpsPage_Head_Status_warning");
  378. var alarmHead = document.getElementById("PumpsPage_Head_Status_alarm");
  379. var textSpan = document.getElementById("head_left_text");
  380. if (pumpsHead == null || normalHead == null || warningHead == null || alarmHead == null || textSpan ==null) {
  381. return;
  382. }
  383. var message = "";
  384. if (alarmNozzles.length > 0) {
  385. alarmNozzles.forEach(function(d) {
  386. message = message+d + ",";
  387. });
  388. normalHead.style.visibility = "hidden";
  389. warningHead.style.visibility = "hidden";
  390. alarmHead.style.visibility = "visible";
  391. message = message + "号枪处于报警状态";
  392. textSpan.style.textAlign = "left";
  393. textSpan.innerHTML = message;
  394. return;
  395. }
  396. if (warningNozzles.length > 0) {
  397. warningNozzles.forEach(function(d) {
  398. message = message+d + ",";
  399. });
  400. normalHead.style.visibility = "hidden";
  401. warningHead.style.visibility = "visible";
  402. alarmHead.style.visibility = "hidden";
  403. message = message + "号枪处于预警状态";
  404. textSpan.style.textAlign = "left";
  405. textSpan.innerHTML = message;
  406. return;
  407. }
  408. }
  409. </script>
  410. <div id="nozzles" style="position: relative; width:@(screenWidth)px; height:@(mainviewHeight)px;">
  411. @*<div id="nozzles_1" style="position: relative; float: left;margin-left:@(marginleft)px; width:@(maxNozzlewidth)px; height:@(nozzleHeight)px; border: 1px solid #00bfff">
  412. </div>
  413. <div id="nozzles_2" style="position: relative; float: left;margin-left:@(marginleft)px; width:@(maxNozzlewidth)px; height:@(nozzleHeight)px; border: 1px solid #00bfff">
  414. </div>*@
  415. @* <input type="button" onclick="GenerateView(12)" value="GenerateView" />*@
  416. @*@for (int i = 0; i < 12; i++)
  417. {
  418. <div id="nozzles_@i" style="position:relative; float: left;margin-left:@(marginleft)px; margin-top: @(margintop)px; width: @(maxNozzlewidth)px; height: @(nozzleHeight)px;border: 1px solid #00bfff">
  419. <div id="nozzleId_@i" style="position: relative; float:left;width: 100%; height: @(textlableHeight)px; text-align: left; font-size: 22px;font-weight: bold">@i</div>
  420. <div id="nozzleImg_@i" style="position: relative; float: left;width: 100%; height: @(nozzleImagHeight)px; text-align: center">
  421. <img id="nozzleImage_Idle_@i" src="/image/online/油枪IDEL.png" style="visibility: visible" />
  422. <img id="nozzleImage_Calling_@i" src="/image/online/油枪CALLING.png" style="position: absolute; top: 0px; left:@((maxNozzlewidth-minNozzlewidth)/2)px;visibility: visible" />
  423. <img id="nozzleImage_Authorized_@i" src="/image/online/油枪授权.png" style="position: absolute; top: 0px; left:@((maxNozzlewidth-minNozzlewidth)/2)px;visibility: visible" />
  424. <img id="nozzleImage_Fuelling_@i" src="/image/online/油枪加油中.png" style="position: absolute; left: 0px;visibility: visible" />
  425. <img id="nozzleImage_Closed_@i" src="/image/online/油枪未连接.png" style="position: absolute; top: 0px; left:@((maxNozzlewidth-minNozzlewidth)/2)px;visibility: visible" />
  426. <img id="nozzleImage_Disconnect_@i" src="/image/online/油枪断开.png" style="position: absolute; top: 0px; left:@((maxNozzlewidth-minNozzlewidth)/2)px;visibility: visible" />
  427. <img id="nozzleALImage_Normal_@i" src="/image/online/normal.png" style="position: absolute; top:@(nozzleImagHeight-alImgWidth)px; left:@(maxNozzlewidth-alImgWidth)px;visibility: visible" />
  428. <img id="nozzleALImage_Warning_@i" src="/image/online/warning.png" style="position: absolute; top:@(nozzleImagHeight-alImgWidth)px; left:@(maxNozzlewidth-alImgWidth)px;visibility: visible" />
  429. <img id="nozzleALImage_Alarm_@i" src="/image/online/alarm.png" style="position: absolute; top:@(nozzleImagHeight-alImgWidth)px; left:@(maxNozzlewidth-alImgWidth)px;visibility: visible" />
  430. </div>
  431. <div id="nozzleAmount_@i" style="position: relative; float: left;width: 100%; height:@(textlableHeight)px; border: 1px solid#00bfff;">
  432. <div id="nozzleAmount_img_@i" style="position: relative;float: left;width:@(textlableHeight+5)px; height:100%;border: 1px solid#00bfff;">
  433. <img id="nozzleAmount_img_notPaid_@i" src="/image/online/人民币标志NotPaid.png" />
  434. <img id="nozzleAmount_img_Paid_@i" src="/image/online/人民币标志已付款.png" style="position: absolute; top:@((textlableHeight-imgPaidHeight)/2)px; left:@((textlableHeight-imgPaidWidth)/2)px;" />
  435. <span style="position: absolute; left: @(textlableHeight)px; text-align: center;line-height: @(textlableHeight)px; font-size: @(lableFontSize)px; font-weight:bold;">:</span>
  436. </div>
  437. <div>
  438. </div>
  439. </div>
  440. <div id="nozzleLiter_@i" style="position: relative; float: left; width: 100%; height:@(textlableHeight)px;font-size: @(lableFontSize)px; font-weight: bold;border: 1px solid#00bfff;">
  441. <div id="nozzleLiter_img_@i" style="position: relative;float:left;width:@(textlableHeight)px; height:100%;">
  442. 升:
  443. </div>
  444. <div id="nozzleLiter_text_@i" style="position: relative; float: left;">
  445. 1234.00
  446. </div>
  447. </div>
  448. <div id="nozzleAL_@i" style="position: relative; float: left;width: 100%; height: @(textlableHeight)px; font-size: @(lableFontSize)px; font-weight: bold;border: 1px solid#00bfff;">
  449. 汽液比 1.3
  450. </div>
  451. </div>
  452. }*@
  453. </div>
  454. <img id="ALLogo" src="@(imgPrePath)AL.png" onclick="LogonClicked(this.id)" style="position: absolute; left:@(screenWidth-alLogoWidth-10)px; top:@(alLogoTop)px;visibility:visible;" />
  455. <img id="SmartFuelLogo" src="@(imgPrePath)SmartFuel.png" onclick="LogonClicked(this.id)" style="position: absolute; left:@(screenWidth-smartFuelLogoWidth-10)px; top:@(alLogoTop)px; visibility: hidden;" />
  456. <script>
  457. if (document.getElementById("ALLogo") != null)
  458. document.getElementById("ALLogo").style.visibility = alLogoVisibility;
  459. if (document.getElementById("SmartFuelLogo") != null)
  460. document.getElementById("SmartFuelLogo").style.visibility = smartFuelLogoVisibility;
  461. </script>
  462. <script src="~/js/mqtt.min.js"></script>
  463. <script type="text/javascript">
  464. var hostname = 'localhost', //'192.168.1.2',
  465. port = 8384,
  466. clientId = 'mqttjs_' + (Math.random() * 1000000).toString(),
  467. timeout = 5000,
  468. keepAlive = 100,
  469. cleanSession = false,
  470. mqttVersion = 3,
  471. ssl = false;
  472. //var client = new Paho.MQTT.Client(hostname, port, clientId);
  473. //client.onConnectionLost = onConnectionLost;//绑定连接断开事件
  474. //client.onMessageArrived = onMessageArrived;//
  475. var options = {
  476. //mqtt客户端的id,这里面应该还可以加上其他参数,具体看官方文档
  477. clientId: 'mqttjs_' + (Math.random() * 1000000).toString(),
  478. //invocationContext: {
  479. // host: hostname,
  480. // port: port,
  481. // //path: client.path,
  482. // mqttVersion:mqttVersion,
  483. // clientId: clientId
  484. //},
  485. //mqttVersion:mqttVersion,
  486. timeout: timeout,
  487. //keepAliveInterval: keepAlive,
  488. //cleanSession: cleanSession,
  489. useSSL: false
  490. //onSuccess: onConnect,
  491. //onFailure: onError
  492. }
  493. //浏览器采用websocket协议,host主机地址为192.168.0.200,端口为9001,路径为/mqtt
  494. var client = mqtt.connect("@Model.mqttConnectionString", options); // you add a ws:// url here
  495. ////建立连接
  496. client.on('connect',
  497. function () {
  498. var a = document.getElementById("testmqqt");
  499. if (a != null) a.innerHTML = "connected";
  500. client.subscribe('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData_reply',
  501. function (err) {
  502. if (!err) {
  503. client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData', "Hello mqtt");
  504. };
  505. });
  506. client.subscribe('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/event/OnVaporRecoveryStateChange/post',
  507. function (err) {
  508. if (!err) {
  509. console.log("subscribe vr state change event successfully");
  510. } else {
  511. console.log("subscribe vr state change event failed" + err);
  512. }
  513. });
  514. });
  515. //如果连接错误,打印错误
  516. client.on('error',
  517. function (err) {
  518. console.log("error happens, will close the client");
  519. client.end();
  520. });
  521. //如果client订阅主题成功,那么这里就是当接收到自己订阅主题的处理逻辑
  522. client.on('message',
  523. function (topic, message) {
  524. // message is Buffer,此处就是打印消息的具体内容
  525. //console.log('-> ' + message.toString());
  526. var a = document.getElementById("testmqqt");
  527. if (a != null) a.innerHTML = topic;
  528. if (topic === "/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetConfigAsync_reply") {
  529. processConfigData(JSON.parse(message.toString()));
  530. return;
  531. }
  532. if (topic === "/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData_reply") {
  533. ClearOldItems();
  534. GenerateNozzleView(JSON.parse(message.toString()));
  535. return;
  536. }
  537. if (topic === '/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/event/OnVaporRecoveryStateChange/post') {
  538. UpdateVrState(JSON.parse(message.toString()));
  539. return;
  540. }
  541. });
  542. function processConfigData(message) {
  543. var WarningValueMin = message.onlineWatchConfig.WarningValueMin;
  544. var WarningValueMax = message.onlineWatchConfig.WarningValueMax;
  545. console.log(message);
  546. //var a = document.getElementById("testmqqt");
  547. //if (a != null) a.innerHTML = WarningValueMin;
  548. }
  549. function processNozzlesData(message) {
  550. var data = message.data;
  551. var pumpMap = new Map();
  552. var currentDispenserId = 0;
  553. var nozzlesArray = new Array();
  554. data.forEach(function (d) {
  555. if (currentDispenserId === 0) {
  556. currentDispenserId = d.SiteLevelDispenserId;
  557. nozzlesArray.push(d);
  558. } else if (currentDispenserId !== d.SiteLevelDispenserId) {
  559. pumpMap.set(currentDispenserId, new Array().concat(nozzlesArray));
  560. currentDispenserId = d.SiteLevelDispenserId;
  561. nozzlesArray.splice(0, nozzlesArray.length);
  562. nozzlesArray.push(d);
  563. } else {
  564. currentDispenserId = d.SiteLevelDispenserId;
  565. //nozzlesArray.clear();
  566. nozzlesArray.push(d);
  567. }
  568. });
  569. if (nozzlesArray.length > 0) {
  570. pumpMap.set(currentDispenserId, new Array().concat(nozzlesArray));
  571. nozzlesArray.splice(0, nozzlesArray.length);
  572. }
  573. pumpMap.forEach(function (value, key) {
  574. var dispenserId = key;
  575. var nozzleCount = value.length;
  576. });
  577. }
  578. function LogonClicked(id) {
  579. var logo = document.getElementById(id);
  580. if (logo != null) logo.style.visibility = "hidden";
  581. ClearOldItems();
  582. if (id === "ALLogo" && client != null) {
  583. currentView = "AL";
  584. client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData',
  585. "Hello mqtt");
  586. if (document.getElementById("SmartFuelLogo") != null)
  587. document.getElementById("SmartFuelLogo").style.visibility = "visible";
  588. } else if (id === "SmartFuelLogo" && client != null) {
  589. if (document.getElementById("ALLogo") != null)
  590. currentView = "SmartFuel";
  591. document.getElementById("ALLogo").style.visibility = "visible";
  592. }
  593. }
  594. //// 用户程序点击事件
  595. function Onmqtttest() {
  596. message = "message from browser with websocket"; // 消息内容
  597. //发布主题presence,消息内容为Hello mqtt,订阅与推送一样自发自收
  598. client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetConfigAsync', 'Hello mqtt ' + message);
  599. var a = document.getElementById("testmqqt");
  600. if (a != null) a.innerHTML = message;
  601. }
  602. //显示前一页
  603. function ShowPreviousPage() {
  604. if (currentPage === 1) {
  605. alert("已经是第一页!");
  606. return;
  607. }
  608. ClearOldItems();
  609. oldPage = currentPage;
  610. currentPage--;
  611. //如果当前油气回收页面则重新获取NozzlesData
  612. if (currentView === "AL" && client != null) {
  613. client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData');
  614. }
  615. }
  616. //显示下一页
  617. function ShowNextPage() {
  618. if (currentPage === totalPage) {
  619. alert("已经是最后一页!");
  620. return;
  621. }
  622. ClearOldItems();
  623. oldPage = currentPage;
  624. currentPage++;
  625. //如果当前油气回收页面则重新获取NozzlesData
  626. if (currentView === "AL" && client != null) {
  627. client.publish('/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/GetNozzlesData');
  628. }
  629. }
  630. </script>