ALNozzleConfig.cshtml 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978
  1. <div id="alNozzlesPage" style="position: relative; width:100%; height:100%;">
  2. <div id="alNozzles" style="position: absolute;top:2.4%; width:100%; height:88.516%;">
  3. <div v-show="nozzleLength>0" class="toplabels">
  4. <div class="topALLabel">時間</div>
  5. <div class="topALLabel">氣</div>
  6. <div class="topALLabel">油</div>
  7. <div class="topALLabel">氣液比</div>
  8. </div>
  9. <div v-show="nozzleLength>6" class="toplabels" style="top:58%;">
  10. <div class="topALLabel">時間</div>
  11. <div class="topALLabel">氣</div>
  12. <div class="topALLabel">油</div>
  13. <div class="topALLabel">氣液比</div>
  14. </div>
  15. <div v-for="n in Nozzles" class="NozzleDiv">
  16. <div class="topALDatas">
  17. <div class="historyIcon" style="padding-left:4%;" @@click="PreHistory(n)"><</div>
  18. <div class="topALTrans topALTransBolderRight">
  19. <div class="topAL">{{n.ALIsNormalTimeStampHistory}}</div>
  20. <div class="topAL">
  21. @*<div class="topALLabel">氣</div>*@
  22. <div class="topALLabelData">{{n.VaporVolumeWithDecimalHistory}}</div>
  23. </div>
  24. <div class="topAL">
  25. @*<div class="topALLabel">油</div>*@
  26. <div class="topALLabelData">{{n.LiquidVolumeWithDecimalHistory}}</div>
  27. </div>
  28. <div class="topAL">
  29. @*<div class="topALLabel" style="width:50%;">氣液比</div>*@
  30. <div v-if="n.ALIsNormal === true" class="topALLabelData" @*style="width:50%;"*@>{{n.VaporLiquidRatioHistory}}</div>
  31. <div v-else class="topALLabelData" style="color: deeppink;">{{n.VaporLiquidRatioHistory}}</div> @*width: 50%;*@
  32. </div>
  33. </div>
  34. <div class="topALTrans">
  35. <div class="topAL">{{n.ALIsNormalTimeStamp}}</div>
  36. <div class="topAL">
  37. @*<div class="topALLabel">氣</div>*@
  38. <div class="topALLabelData">{{n.VaporVolumeWithDecimal}}</div>
  39. </div>
  40. <div class="topAL">
  41. @*<div class="topALLabel">油</div>*@
  42. <div class="topALLabelData">{{n.LiquidVolumeWithDecimal}}</div>
  43. </div>
  44. <div class="topAL">
  45. @*<div class="topALLabel" style="width:50%;">氣液比</div>*@
  46. <div v-if="n.ALIsNormal === true" class="topALLabelData" @*style="width:50%;"*@>{{n.VaporLiquidRatio}}</div>
  47. <div v-else class="topALLabelData" style="color: deeppink;">{{n.VaporLiquidRatio}}</div>@* width: 50%;*@
  48. </div>
  49. </div>
  50. <div class="historyIcon" style="padding-right:4%;" @@click="NextHistory(n)">></div>
  51. </div>
  52. <div class="ALDatas" @@click="DisplayConfigForm(n)">
  53. <div class="NozzleId">{{n.SiteLevelNozzleId}}</div>
  54. @*<img v-show="n.FuelingState ==='IDLE'" src="/WebConsole/images/smartFuel/idleStatic.png" class="FuelingState" />*@
  55. @*<img v-show="n.FuelingState ==='FUELING'" src="/WebConsole/images/smartFuel/fuelling.gif" class="FuelingState"/>*@
  56. <img :src="n.imgsource" class="FuelingState" />
  57. @*<img v-show="n.HealthState === 'NORMAL' && n.FuelingState !=='FUELING'" src="~/WebConsole/images/onlineMonitor/nozzleView/NozzleALNormal.png" class="HealthState" />
  58. <img v-show="n.HealthState === 'WARNING' && n.FuelingState !=='FUELING'" src="~/WebConsole/images/onlineMonitor/nozzleView/NozzleALWarning.png" class="HealthState" />
  59. <img v-show="(n.HealthState === 'DISCONNETED'||n.HealthState === 'NOT_SET'||n.HealthState === 'NO_VR') && n.FuelingState !=='FUELING'" src="~/WebConsole/images/onlineMonitor/nozzleView/NozzleALDisconnect.png" class="HealthState" />
  60. <img v-show="n.HealthState === 'ALARM' && n.FuelingState !=='FUELING'" src="~/WebConsole/images/onlineMonitor/nozzleView/NozzleALAlarm.png" class="HealthState" />*@
  61. </div>
  62. <div class="ALDatas">
  63. <div class="ALLable" style="margin-top:40%;">油气脈衝當量</div>
  64. <div class="ALLableData">{{n.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量}}</div>
  65. <div class="ALLable">標註氣液比值</div>
  66. <div class="ALLableData">{{n.advancedSettings.BoardInitParameterConfigV1.气液比值}}</div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="settingsBox" v-if="showConfigForm">
  71. <div class="settingsBody">
  72. <form v-if="mode===1" autocomplete="off" onsubmit="return WriteBoardNozzleInitParameters()">
  73. <div class="modeSettingsLabel">站級槍號 {{advancedSettings.SiteLevelNozzleId}}</div>
  74. <div class="modeSettingsLabel">最大未變化次數<input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.最大未变化次数" type="text" min="0" max="99999" @@click="show" /></div>
  75. <div class="modeSettingsLabel">開始加油閥值<input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.开始加油阀值" type="text" min="0" max="99999" @@click="show"/></div>
  76. <div class="modeSettingsLabel">停止加油閥值<input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.停止加油阀值" type="text" min="0" max="99999" @@click="show" /></div>
  77. <div class="modeSettingsLabel">最小加油量<input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.最小加油量" type="text" min="0" max="99999" @@click="show"/></div>
  78. <div class="modeSettingsLabel">加油脈衝當量<input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.加油脉冲当量" type="text" min="0" max="99999" @@click="show"/></div>
  79. <div class="modeSettingsLabel">油气脈衝當量<input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.油气脉冲当量" type="text" min="0" max="99999" @@click="show" /></div>
  80. <div class="modeSettingsLabel">標準氣液比中值 <input class="inputPoistion" v-model="advancedSettings.BoardInitParameterConfigV1.气液比值" type="text" min="0" max="10" @@click="show"/></div>
  81. <div class="modeSettingsLabel submitButtonPosition" style="height:12%;">
  82. <input class="inputButton" type="submit" style="margin-right:3%;" value="發送給當前油槍" onclick="setSubmitMode(0)"/>
  83. <input class="inputButton" type="submit" value="發送給所有油槍" onclick="setSubmitMode(1)"/>
  84. </div>
  85. </form>
  86. <div v-else>
  87. <form>
  88. <div class="modeSettingsLabel">站級槍號:{{normalSettings.SiteLevelNozzleId}}</div>
  89. <div class="modeSettingsLabel">最後一筆交易數據</div>
  90. <div class="modeSettingsLabel-trans">氣:{{normalSettings.LatestTrxFlowData.VaporVolumeWithDecimal}}</div>
  91. <div class="modeSettingsLabel-trans">油:{{normalSettings.LatestTrxFlowData.LiquidVolumeWithDecimal}}</div>
  92. <div class="modeSettingsLabel-trans">氣液比:{{normalSettings.LatestTrxFlowData.VaporLiquidRatio}}</div>
  93. @*<div class="modeSettingsLabel">待校准记录的系统吸气体积值:</div>
  94. <div class="modeSettingsLabel">{{normalSettings.currentReadingValue}}</div>*@
  95. <div class="modeSettingsLabel">標準測定氣體體積(升)</div>
  96. <div class="modeSettingsLabel"><input type="text" v-model="normalSettings.standardReadingValue" @@click="show"/></div>
  97. <div class="modeSettingsLabel submitButtonPosition">
  98. <input class="inputButton" type="button" value="校準並發送給當前油槍" onclick="calibrateBoardNozzleInitParameter(0)" />
  99. <input class="inputButton" style="display:none;" type="button" value="校準並發送給所有油槍" onclick="calibrateBoardNozzleInitParameter(1)" />
  100. </div>
  101. </form>
  102. </div>
  103. </div>
  104. <div class="modeDiv">
  105. <input :class="mode===0?'modeButtonActive inputButton':'modeButton inputButton'" type="button" value="普通模式" onclick="modeChage(0)"/>
  106. <input :class="mode===1?'modeButtonActive inputButton':'modeButton inputButton'" type="button" value="專家模式" onclick="modeChage(1)"/>
  107. </div>
  108. </div>
  109. </div>
  110. <script>
  111. var currentPage = 1;
  112. var oldPage = currentPage;
  113. var totalPage = 1;
  114. var maxNozzleNumberInOnePage = 12;
  115. var alIntervalId = -1;
  116. //切换至气液比油枪界面
  117. function ToggleSmartFuel() {
  118. RenderDiv("/OnlineMonitor/Nozzles", contentDiv, null, null);
  119. }
  120. var vm_config = new Vue({
  121. el: '#alNozzlesPage',
  122. data: {
  123. totalPage: 1,
  124. Nozzles: [/*{ "SiteLevelNozzleId": 1, "HealthState": "NORMAL", "LatestTrxFlowData": null, "FuelingState": "IDLE",
  125. * HistoryTransactions:}*/],
  126. smartFuelEnabled: false,
  127. nozzleLength:0,
  128. advancedSettings: {
  129. "SiteLevelNozzleId": 1, "BoardInitParameterConfigV1": {
  130. "最大未变化次数": null,
  131. "开始加油阀值": null,
  132. "停止加油阀值": null,
  133. "最小加油量": null,
  134. "加油脉冲当量": null,
  135. "油气脉冲当量": null,
  136. "气液比值": null
  137. }
  138. },
  139. normalSettings: {
  140. "SiteLevelNozzleId": 1,
  141. "LatestTrxFlowData": null,
  142. "currentConefficientValue":0,
  143. "currentReadingValue": 0,
  144. "standardReadingValue":null
  145. },
  146. siteLevelIds: [],
  147. showConfigForm: false,
  148. mode: 0,//0-普通模式 1-专家模式,
  149. submitType:0//仅提交参数给当前的一块,1提交给所有的板子
  150. },
  151. methods: {
  152. show(e) {
  153. showKeyboard("default", e.currentTarget)
  154. }
  155. },
  156. mouted() {
  157. }
  158. });
  159. $(document).ready(function () {
  160. if (vm_config === undefined) return;
  161. if (apis.has("GetPumpsLayout")) {
  162. vm_config.smartFuelEnabled = true;
  163. }
  164. alIntervalId = setInterval(function () {
  165. console.log("time interval");
  166. if (vm_config.Nozzles.length === 0) {
  167. ALNozzlesSubscribeEvents();
  168. }
  169. }, 5000);
  170. if (apis.size > 0 && apis.has("GetVRBoardNozzles")) {
  171. ALNozzlesSubscribeEvents();
  172. return;
  173. }
  174. //var requestData = ["localMqtt", ["在线监测"]];
  175. ShowMeAPIS(["localMqtt", ["OnlineWatch"]], function () {
  176. ALNozzlesSubscribeEvents();
  177. });
  178. //var serviceUrl = basicUrl + "/u/?apitype=service&an=ShowMeApi&pn=ProcessorsDispatcher&en=Edge.Core.Processor.Dispatcher.DefaultDispatcher";
  179. //$.ajax({
  180. // url: serviceUrl,
  181. // datatype: "application/json",
  182. // type: 'post',
  183. // contentType: "application/json;charset=utf-8;",
  184. // data: JSON.stringify(requestData),
  185. // beforeSend: function () {
  186. // },
  187. // success: function (data) {
  188. // console.log(data);
  189. // data.forEach(function (d) {
  190. // if (apis.has(d.ApiName)) {
  191. // apis.delete(d.ApiName);
  192. // }
  193. // apis.set(d.ApiName, d.Path.slice(d.Path.length - 1) === "+" ? d.Path.slice(0, d.Path.length - 1) : d.Path);
  194. // });
  195. // ALNozzlesSubscribeEvents();
  196. // },
  197. // error: function (err) {
  198. // console.log(err);
  199. // }
  200. //});
  201. }
  202. );
  203. mqttclient.on('connect', function () {
  204. ALNozzlesSubscribeEvents();
  205. });
  206. //mqttclient.on('message', function (topic, message) {
  207. // if (apis.size > 0 && apis.has("GetVRBoardNozzles_Reply") && topic === apis.get("GetVRBoardNozzles_Reply")) {
  208. // vm.Nozzles = JSON.parse(message.toString());
  209. // }
  210. //});
  211. function OnReply(apis, topic, jsonObj) {
  212. if (apis.size > 0 && apis.has("GetVRBoardNozzles_Reply") && topic === apis.get("GetVRBoardNozzles_Reply")) {
  213. //vm.Nozzles = jsonObj;
  214. if (!Array.isArray(jsonObj)) {
  215. console.log("Invalid response GetVRBoardNozzles_Reply");
  216. return;
  217. }
  218. //stop the interval if can receive message from mqtt
  219. if (alIntervalId !== -1) {
  220. console.log("stop the interval:" + alIntervalId);
  221. clearInterval(alIntervalId);
  222. }
  223. vm_config.siteLevelIds = [];
  224. jsonObj.forEach(function (d) {
  225. console.log("GetVRBoardNozzles_Reply:" + d.SiteLevelNozzleId + "-" + d.FuelingState);
  226. vm_config.siteLevelIds.push(d.SiteLevelNozzleId);
  227. d.currentIndex = 0;//当前翻页
  228. d.VaporVolumeWithDecimal = d.LatestTrxFlowData === null ? "" : d.LatestTrxFlowData.VaporVolumeWithDecimal;
  229. d.LiquidVolumeWithDecimal = d.LatestTrxFlowData === null ? "" : d.LatestTrxFlowData.LiquidVolumeWithDecimal;
  230. d.VaporLiquidRatio = d.LatestTrxFlowData === null ? "" : d.LatestTrxFlowData.VaporLiquidRatio;
  231. d.ALIsNormal = d.LatestTrxFlowData === null ? "" : d.LatestTrxFlowData.气液比值是否正常;
  232. d.imgsource = d.FuelingState === "FUELING" ? "/WebConsole/images/smartFuel/fuelling.gif?a=" + d.SiteLevelNozzleId : (d.FuelingState === "IDLE" ? "/WebConsole/images/smartFuel/idleStatic.png" : "/WebConsole/images/smartFuel/disconnect.png");
  233. if (d.advancedSettings === undefined) {
  234. d.advancedSettings = {
  235. "SiteLevelNozzleId": d.SiteLevelNozzleId, "BoardInitParameterConfigV1": {
  236. "最大未变化次数": 1,
  237. "开始加油阀值": 1,
  238. "停止加油阀值": 1,
  239. "最小加油量": 1,
  240. "加油脉冲当量": 1,
  241. "油气脉冲当量": 1,
  242. "气液比值": 1
  243. }
  244. };
  245. }
  246. if (d.normalSettings === undefined) {
  247. d.normalSettings = {
  248. "SiteLevelNozzleId": d.SiteLevelNozzleId,
  249. "LatestTrxFlowData": null,
  250. "currentConefficientValue": 0,
  251. "currentReadingValue": 0,
  252. "standardReadingValue": null
  253. };
  254. }
  255. })
  256. totalPage = Math.ceil(jsonObj.length / maxNozzleNumberInOnePage);
  257. var dataLength =
  258. (jsonObj.length - maxNozzleNumberInOnePage * (currentPage - 1)) > maxNozzleNumberInOnePage
  259. ? maxNozzleNumberInOnePage
  260. : (jsonObj.length - maxNozzleNumberInOnePage * (currentPage - 1));
  261. vm_config.Nozzles = jsonObj.sort(sortBySiteLevelNozzleId).slice((currentPage - 1) * maxNozzleNumberInOnePage, (currentPage - 1) * maxNozzleNumberInOnePage + dataLength);
  262. vm_config.Nozzles.forEach(function (n) {
  263. ReadBoardNozzleInitParameters(n.SiteLevelNozzleId, (data) => {
  264. n.advancedSettings.BoardInitParameterConfigV1.最大未变化次数 = data===null?"?":data.最大未变化次数;
  265. n.advancedSettings.BoardInitParameterConfigV1.开始加油阀值 = data === null ? "?":data.开始加油阀值;
  266. n.advancedSettings.BoardInitParameterConfigV1.停止加油阀值 = data === null ? "?" :data.停止加油阀值;
  267. n.advancedSettings.BoardInitParameterConfigV1.最小加油量 = data === null ? "?" :data.最小加油量;
  268. n.advancedSettings.BoardInitParameterConfigV1.加油脉冲当量 = data === null ? "?" : data.加油脉冲当量;
  269. n.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量 = data === null ? "?" :data.油气脉冲当量;
  270. n.advancedSettings.BoardInitParameterConfigV1.气液比值 = data === null ? "?" :data.气液比值;
  271. n.normalSettings.currentConefficientValue = data === null ? "?" : data.油气脉冲当量;
  272. });
  273. setTimeout(GetVRBoardNozzleTrxFlowDatas, 2, n.SiteLevelNozzleId, 0);
  274. });
  275. vm_config.nozzleLength = vm_config.Nozzles.length;
  276. if (currentPage > totalPage) {
  277. currentPage = totalPage;
  278. }
  279. UpdateFooterPage();
  280. } else if (apis.size > 0 && apis.has("OnVaporRecoveryDataCollectorBoardNozzleFlowDataRead") && topic === apis.get("OnVaporRecoveryDataCollectorBoardNozzleFlowDataRead")) {
  281. if (vm_config.Nozzles.length > 0) {
  282. vm_config.Nozzles.forEach(function (n) {
  283. if (n.SiteLevelNozzleId === jsonObj.SiteLevelNozzleId && n.LatestTrxFlowData) {
  284. n.LatestTrxFlowData.VaporVolumeWithDecimal = jsonObj.VaporVolumeWithDecimal;
  285. n.LatestTrxFlowData.LiquidVolumeWithDecimal = jsonObj.LiquidVolumeWithDecimal;
  286. n.LatestTrxFlowData.VaporLiquidRatio = jsonObj.VaporLiquidRatio;
  287. //n.FuelingState = jsonObj.FuellingStartTime === null ? "FUELING" : "IDLE";
  288. //n.HealthState = jsonObj.气液比值是否正常 === true ? "NORMAL" : "WARNING";
  289. n.LatestTrxFlowData.气液比值是否正常 = jsonObj.气液比值是否正常;
  290. //console.log("OnVaporRecoveryDataCollectorBoardNozzleFlowDataRead-VaporLiquidRatio:" + jsonObj.VaporLiquidRatio);
  291. }
  292. })
  293. }
  294. } else if (apis.size > 0 && apis.has("OnVaporRecoveryDataCollectorBoardNozzleStateChange") && topic === apis.get("OnVaporRecoveryDataCollectorBoardNozzleStateChange")) {
  295. if (vm_config.Nozzles.length > 0) {
  296. vm_config.Nozzles.forEach(function (n) {
  297. if (n.SiteLevelNozzleId === jsonObj.SiteLevelNozzleId) {
  298. // console.log("CollectorBoardNozzleStateChange:" + jsonObj.SiteLevelNozzleId + "-" + jsonObj.FuelingState);
  299. n.imgsource = jsonObj.FuelingState === "IDLE" ? ((n.imgsource === "/WebConsole/images/smartFuel/fuelling.gif?a=" + n.SiteLevelNozzleId) ?
  300. "/WebConsole/images/smartFuel/Idle.gif?a=" + n.SiteLevelNozzleId : "/WebConsole/images/smartFuel/idleStatic.png") :
  301. "/WebConsole/images/smartFuel/fuelling.gif?a=" + n.SiteLevelNozzleId;
  302. n.FuelingState = jsonObj.FuelingState;
  303. n.HealthState = jsonObj.HealthState;
  304. if (jsonObj.FuelingState === "IDLE" && n.currentIndex === 0)
  305. setTimeout(GetVRBoardNozzleTrxFlowDatas, 2, jsonObj.SiteLevelNozzleId, 0);
  306. }
  307. })
  308. }
  309. } else if (apis.size > 0 && apis.has("OnVaporRecoveryDataCollectorBoardStateChange") && topic === apis.get("OnVaporRecoveryDataCollectorBoardStateChange")) {
  310. if (vm_config.Nozzles.length > 0 && jsonObj !== null) {
  311. if (jsonObj.State === "UnInit") {
  312. jsonObj.Nozzles.forEach(function (bn) {
  313. var tempNozzle = vm_config.Nozzles.find(n => n.SiteLevelNozzleId === bn.SiteLevelNozzleId);
  314. if (tempNozzle !== undefined)
  315. tempNozzle.imgsource = "/WebConsole/images/smartFuel/disconnect.png";
  316. });
  317. } else if (jsonObj.State === "Initialized") {
  318. jsonObj.Nozzles.forEach(function (bn) {
  319. var tempNozzle = vm_config.Nozzles.find(n => n.SiteLevelNozzleId === bn.SiteLevelNozzleId);
  320. //tempNozzle.imgsource = "/WebConsole/images/smartFuel/disconnect.png";
  321. if (tempNozzle !== undefined && tempNozzle.imgsource === "/WebConsole/images/smartFuel/disconnect.png")
  322. tempNozzle.imgsource = "/WebConsole/images/smartFuel/idleStatic.png";
  323. });
  324. }
  325. }
  326. } else if (apis.size > 0 && apis.has("GetVRBoardNozzleTrxFlowDatas_Reply") && topic === apis.get("GetVRBoardNozzleTrxFlowDatas_Reply")) {
  327. console.log("GetVRBoardNozzleTrxFlowDatas_Reply");
  328. if (jsonObj !== null && vm_config.Nozzles.length > 0) {
  329. vm_config.Nozzles.forEach(function (n) {
  330. if (jsonObj.length > 0 && n.SiteLevelNozzleId === jsonObj[0].SiteLevelNozzleId) {
  331. n.VaporVolumeWithDecimal = jsonObj[0].VaporVolumeWithDecimal;
  332. n.LiquidVolumeWithDecimal = jsonObj[0].LiquidVolumeWithDecimal;
  333. n.VaporLiquidRatio = jsonObj[0].VaporLiquidRatio;
  334. n.ALIsNormal = jsonObj[0].气液比值是否正常;
  335. let timeString = jsonObj[0].FuellingEndTime;
  336. n.ALIsNormalTimeStamp = Pad1(new Date(timeString).getHours(), 2) +
  337. ":" + Pad1(new Date(timeString).getMinutes(), 2) + ":" + Pad1(new Date(timeString).getSeconds(), 2);
  338. n.VaporVolumeWithDecimalHistory = jsonObj.length === 2 ? jsonObj[1].VaporVolumeWithDecimal : null;
  339. n.LiquidVolumeWithDecimalHistory = jsonObj.length === 2 ? jsonObj[1].LiquidVolumeWithDecimal : null;
  340. n.VaporLiquidRatioHistory = jsonObj.length === 2 ? jsonObj[1].VaporLiquidRatio : null;
  341. n.ALIsNormalHistory = jsonObj.length === 2 ? jsonObj[1].气液比值是否正常 : null;
  342. timeString = jsonObj.length === 2 ? jsonObj[1].FuellingEndTime : "";
  343. n.ALIsNormalTimeStampHistory = jsonObj.length === 2 ? Pad1(new Date(timeString).getHours(), 2) +
  344. ":" + Pad1(new Date(timeString).getMinutes(), 2) + ":" + Pad1(new Date(timeString).getSeconds(), 2) : null;
  345. }
  346. })
  347. }
  348. }
  349. }
  350. //In ascending order of site level nozzle Id
  351. function sortBySiteLevelNozzleId(n1, n2) {
  352. if (n1.SiteLevelNozzleId < n2.SiteLevelNozzleId)
  353. return -1;
  354. else
  355. return 1;
  356. }
  357. function ALNozzlesSubscribeEvents() {
  358. console.log("subsribe ALNozzlesSubscribeEvents");
  359. if (!mqttclient.connected || apis.size === 0) {
  360. console.log("ALNozzlesSubscribeEvents:client is not connected or haven't got APIS");
  361. return;
  362. }
  363. if (apis.has("GetVRBoardNozzles_Reply")) {
  364. mqttclient.subscribe(apis.get("GetVRBoardNozzles_Reply"), function (err) {
  365. if (!err) {
  366. mqttclient.publish(apis.get("GetVRBoardNozzles"));
  367. }
  368. });
  369. }
  370. if (apis.has("OnVaporRecoveryDataCollectorBoardNozzleFlowDataRead")) {
  371. mqttclient.subscribe(apis.get("OnVaporRecoveryDataCollectorBoardNozzleFlowDataRead"), function (err) {
  372. if (!err) {
  373. console.log("subscribe OnVaporRecoveryDataCollectorBoardNozzleFlowDataRead successfully");
  374. }
  375. });
  376. }
  377. if (apis.has("OnVaporRecoveryDataCollectorBoardNozzleStateChange")) {
  378. mqttclient.subscribe(apis.get("OnVaporRecoveryDataCollectorBoardNozzleStateChange"), function (err) {
  379. if (!err) {
  380. console.log("subscribe OnVaporRecoveryDataCollectorBoardNozzleStateChange successfully");
  381. }
  382. });
  383. }
  384. if (apis.has("OnVaporRecoveryDataCollectorBoardStateChange")) {
  385. mqttclient.subscribe(apis.get("OnVaporRecoveryDataCollectorBoardStateChange"), function (err) {
  386. if (!err) {
  387. console.log("subscribe OnVaporRecoveryDataCollectorBoardStateChange successfully");
  388. }
  389. });
  390. }
  391. }
  392. function UpdateFooterPage() {
  393. if (document.getElementById("PumpsPage_Bottom_pages") != null) {
  394. for (var p = 1; p < 6; p++) {
  395. var imgCurrentPageIdStr = "PumpsPage_Bottom_pages_img_" + p;
  396. var imgCurrentPageNotShowedIdStr = "PumpsPage_Bottom_pages_notshowed_img_" + p;
  397. if (p > totalPage) {
  398. if (document.getElementById(imgCurrentPageIdStr) != null)
  399. document.getElementById(imgCurrentPageIdStr).style.visibility = "hidden";
  400. if (document.getElementById(imgCurrentPageNotShowedIdStr) != null)
  401. document.getElementById(imgCurrentPageNotShowedIdStr).style.visibility = "hidden";
  402. } else if (p === currentPage || (p === 5 && currentPage > p)) {
  403. if (document.getElementById(imgCurrentPageIdStr) != null)
  404. document.getElementById(imgCurrentPageIdStr).style.visibility = "visible";
  405. if (document.getElementById(imgCurrentPageNotShowedIdStr) != null)
  406. document.getElementById(imgCurrentPageNotShowedIdStr).style.visibility = "hidden";
  407. } else {
  408. if (document.getElementById(imgCurrentPageIdStr) != null)
  409. document.getElementById(imgCurrentPageIdStr).style.visibility = "hidden";
  410. if (document.getElementById(imgCurrentPageNotShowedIdStr) != null)
  411. document.getElementById(imgCurrentPageNotShowedIdStr).style.visibility = "visible";
  412. }
  413. }
  414. //update next page img position
  415. var nextPageImg = document.getElementById("PumpsPage_Bottom_pages_img_next_page");
  416. var previousPageImg = document.getElementById("PumpsPage_Bottom_pages_img_previous_page");
  417. if (previousPageImg != null) {
  418. //previousPageImg.style.visibility = (totalPage === 1 || currentPage === 1) ? "hidden" : "visible";
  419. previousPageImg.style.visibility = "visible";
  420. }
  421. if (nextPageImg != null) {
  422. //if (totalPage < 5)
  423. nextPageImg.style.left = (16.5 * totalPage + 5).toString() + "%";
  424. nextPageImg.style.visibility = "visible";
  425. //nextPageImg.style.visibility = (totalPage === 1 || currentPage === totalPage) ? "hidden" : "visible";
  426. }
  427. }
  428. }
  429. //显示前一页
  430. function ShowPreviousPage() {
  431. console.log("ShowPreviousPage");
  432. if (currentPage === 1) {
  433. //alert("已经是第一页!");
  434. dialogBox("提示信息", "已經是第一頁",null,null);
  435. return;
  436. }
  437. currentPage--;
  438. if (apis.has("GetVRBoardNozzles_Reply")) {
  439. mqttclient.subscribe(apis.get("GetVRBoardNozzles_Reply"), function (err) {
  440. if (!err) {
  441. mqttclient.publish(apis.get("GetVRBoardNozzles"));
  442. }
  443. });
  444. }
  445. }
  446. //显示下一页
  447. function ShowNextPage() {
  448. console.log("ShowNextPage");
  449. if (currentPage === totalPage) {
  450. //alert("已经是最后一页!");
  451. dialogBox("提示信息", "已經是最後一頁",null,null);
  452. return;
  453. }
  454. currentPage++;
  455. if (apis.has("GetVRBoardNozzles_Reply")) {
  456. mqttclient.subscribe(apis.get("GetVRBoardNozzles_Reply"), function (err) {
  457. if (!err) {
  458. mqttclient.publish(apis.get("GetVRBoardNozzles"));
  459. }
  460. });
  461. }
  462. }
  463. function DisplayConfigForm(nozzle) {
  464. if (nozzle === null || nozzle === undefined)
  465. return;
  466. if (vm_config.showConfigForm) {
  467. vm_config.showConfigForm = false;
  468. return;
  469. }
  470. this.ReadBoardNozzleInitParameters(nozzle.SiteLevelNozzleId, (data) => {
  471. vm_config.advancedSettings.SiteLevelNozzleId = nozzle.SiteLevelNozzleId;
  472. vm_config.advancedSettings.BoardInitParameterConfigV1.最大未变化次数 = nozzle.advancedSettings.BoardInitParameterConfigV1.最大未变化次数 = data === null ? "?" : data.最大未变化次数;
  473. vm_config.advancedSettings.BoardInitParameterConfigV1.开始加油阀值 = nozzle.advancedSettings.BoardInitParameterConfigV1.开始加油阀值 = data === null ? "?" : data.开始加油阀值;
  474. vm_config.advancedSettings.BoardInitParameterConfigV1.停止加油阀值 = nozzle.advancedSettings.BoardInitParameterConfigV1.停止加油阀值 = data === null ? "?" : data.停止加油阀值;
  475. vm_config.advancedSettings.BoardInitParameterConfigV1.最小加油量 = nozzle.advancedSettings.BoardInitParameterConfigV1.最小加油量 = data === null ? "?" : data.最小加油量;
  476. vm_config.advancedSettings.BoardInitParameterConfigV1.加油脉冲当量 = nozzle.advancedSettings.BoardInitParameterConfigV1.加油脉冲当量 = data === null ? "?" : data.加油脉冲当量;
  477. vm_config.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量 = nozzle.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量 = data === null ? "?" : data.油气脉冲当量;
  478. vm_config.advancedSettings.BoardInitParameterConfigV1.气液比值 = nozzle.advancedSettings.BoardInitParameterConfigV1.气液比值 = data === null ? "?" : data.气液比值;
  479. nozzle.normalSettings.currentConefficientValue = data === null ? "?" : data.油气脉冲当量;
  480. vm_config.showConfigForm = !vm_config.showConfigForm && data !== null;
  481. if (vm_config.showConfigForm) {
  482. vm_config.normalSettings.SiteLevelNozzleId = nozzle.SiteLevelNozzleId;
  483. vm_config.normalSettings.LatestTrxFlowData = nozzle.LatestTrxFlowData;
  484. vm_config.normalSettings.currentReadingValue = nozzle.LatestTrxFlowData.VaporVolumeWithDecimal;
  485. //vm_config.advancedSettings = Object.assign({}, nozzle.advancedSettings);//nozzle.advancedSettings;
  486. vm_config.normalSettings.currentConefficientValue = nozzle.normalSettings.currentConefficientValue;
  487. }
  488. })
  489. }
  490. function WriteBoardNozzleInitParameters() {
  491. console.log("WriteBoardNozzleInitParameters");
  492. /*alert("Your details were Submitted");*/
  493. var urlInfos = apis.get("WriteAndPersistVrBoardNozzleInitParameters").split("/");
  494. var pn = urlInfos[2];
  495. var providerType = urlInfos[1];
  496. var tempUrl = basicUrl + "/u/?apitype=service&an=WriteAndPersistVrBoardNozzleInitParameters&pn=" + pn + "&en=" + providerType;
  497. var parameters = {
  498. "最大未变化次数": parseInt(vm_config.advancedSettings.BoardInitParameterConfigV1.最大未变化次数),
  499. "开始加油阀值": parseInt(vm_config.advancedSettings.BoardInitParameterConfigV1.开始加油阀值),
  500. "停止加油阀值": parseInt(vm_config.advancedSettings.BoardInitParameterConfigV1.停止加油阀值),
  501. "最小加油量": parseInt(vm_config.advancedSettings.BoardInitParameterConfigV1.最小加油量),
  502. "加油脉冲当量": parseInt(vm_config.advancedSettings.BoardInitParameterConfigV1.加油脉冲当量),
  503. "油气脉冲当量": parseInt(vm_config.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量),
  504. "气液比值": parseFloat(vm_config.advancedSettings.BoardInitParameterConfigV1.气液比值)
  505. };
  506. //let currentNozzleId = vm_config.advancedSettings.SiteLevelNozzleId;
  507. var singleNozzleId = new Array();
  508. singleNozzleId.push(vm_config.advancedSettings.SiteLevelNozzleId);
  509. var nozzlesList = vm_config.submitType === 1 ? vm_config.siteLevelIds : singleNozzleId;
  510. WriteParameters(tempUrl,nozzlesList, 0, parameters, "", "");
  511. //nozzlesList.forEach(function (id, index) {
  512. // var requestData = new Array();
  513. // requestData.push(id);
  514. // requestData.push(parameters);
  515. // $.ajax({
  516. // url: tempUrl,
  517. // datatype: "application/json",
  518. // type: 'post',
  519. // contentType: "application/json;charset=utf-8;",
  520. // data: JSON.stringify(requestData),
  521. // beforeSend: function () {
  522. // },
  523. // success: function (data) {
  524. // if (data)
  525. // successNozzleIds = successNozzleIds === "" ? id : successNozzleIds+"," + id;
  526. // else
  527. // errNozzleIds = errNozzleIds === "" ? id : errNozzleIds+"," + id;
  528. // if (index === nozzleLength - 1) {
  529. // var promptMsg = errNozzleIds + "號槍設置失敗" + successNozzleIds === "" ? "" : " " + successNozzleIds + "號槍設置成功"
  530. // dialogBox("提示信息", promptMsg, null, null);
  531. // }
  532. // if (data) {
  533. // ReadBoardNozzleInitParameters(id, (data) => {
  534. // vm_config.Nozzles.forEach(function (n) {
  535. // if (n.SiteLevelNozzleId === id) {
  536. // n.advancedSettings.BoardInitParameterConfigV1.最大未变化次数 = data===null?"?" : data.最大未变化次数;
  537. // n.advancedSettings.BoardInitParameterConfigV1.开始加油阀值 = data === null ? "?" :data.开始加油阀值;
  538. // n.advancedSettings.BoardInitParameterConfigV1.停止加油阀值 = data === null ? "?" :data.停止加油阀值;
  539. // n.advancedSettings.BoardInitParameterConfigV1.最小加油量 = data === null ? "?" :data.最小加油量;
  540. // n.advancedSettings.BoardInitParameterConfigV1.加油脉冲当量 = data === null ? "?" :data.加油脉冲当量;
  541. // n.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量 = data === null ? "?" :data.油气脉冲当量;
  542. // n.advancedSettings.BoardInitParameterConfigV1.气液比值 = data === null ? "?" :data.气液比值;
  543. // n.normalSettings.currentConefficientValue = data === null ? "?" :data.油气脉冲当量;
  544. // }
  545. // });
  546. // });
  547. // }
  548. // },
  549. // error: function (err) {
  550. // errNozzleIds = errNozzleIds === "" ? id : errNozzleIds+"," + id;
  551. // if (index === nozzleLength - 1) {
  552. // var promptMsg = errNozzleIds + "號槍設置失敗" + successNozzleIds === "" ? "" : " "+successNozzleIds +"號槍設置成功"
  553. // dialogBox("提示信息", promptMsg, null, null);
  554. // }
  555. // }
  556. // });
  557. //});
  558. return false;
  559. }
  560. function WriteParameters(url,nozzleIds, index, parameters, errMsg, successMsg) {
  561. if (!(nozzleIds.length > 0) || nozzleIds.length < index + 1) return;
  562. var requestData = new Array();
  563. requestData.push(nozzleIds[index]);
  564. requestData.push(parameters);
  565. var nozzleLength = nozzleIds.length;
  566. $.ajax({
  567. url: url,
  568. datatype: "application/json",
  569. type: 'post',
  570. contentType: "application/json;charset=utf-8;",
  571. data: JSON.stringify(requestData),
  572. beforeSend: function () {
  573. },
  574. success: function (data) {
  575. if (data)
  576. successMsg = successMsg === "" ? nozzleIds[index] : successMsg + "," + nozzleIds[index];
  577. else
  578. errMsg = errMsg === "" ? nozzleIds[index] : errMsg + "," + nozzleIds[index];
  579. if (index === nozzleLength - 1) {
  580. var promptMsg = (errMsg === "" ? "" : (errMsg + "號槍設置失敗")) + (successMsg === "" ? "" : " " + (successMsg + "號槍設置成功"));
  581. dialogBox("提示信息", promptMsg, null, null);
  582. }
  583. if (data) {
  584. ReadBoardNozzleInitParameters(nozzleIds[index], (data) => {
  585. vm_config.Nozzles.forEach(function (n) {
  586. if (n.SiteLevelNozzleId === nozzleIds[index]) {
  587. n.advancedSettings.BoardInitParameterConfigV1.最大未变化次数 = data === null ? "?" : data.最大未变化次数;
  588. n.advancedSettings.BoardInitParameterConfigV1.开始加油阀值 = data === null ? "?" : data.开始加油阀值;
  589. n.advancedSettings.BoardInitParameterConfigV1.停止加油阀值 = data === null ? "?" : data.停止加油阀值;
  590. n.advancedSettings.BoardInitParameterConfigV1.最小加油量 = data === null ? "?" : data.最小加油量;
  591. n.advancedSettings.BoardInitParameterConfigV1.加油脉冲当量 = data === null ? "?" : data.加油脉冲当量;
  592. n.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量 = data === null ? "?" : data.油气脉冲当量;
  593. n.advancedSettings.BoardInitParameterConfigV1.气液比值 = data === null ? "?" : data.气液比值;
  594. n.normalSettings.currentConefficientValue = data === null ? "?" : data.油气脉冲当量;
  595. }
  596. });
  597. });
  598. }
  599. index += 1;
  600. if (index < nozzleLength) {
  601. WriteParameters(url,nozzleIds, index, parameters, errMsg, successMsg);
  602. }
  603. },
  604. error: function (err) {
  605. errMsg = errMsg === "" ? nozzleIds[index] : errMsg + "," + nozzleIds[index];
  606. if (index === nozzleLength - 1) {
  607. var promptMsg = (errMsg === "" ? "" : (errMsg + "號槍設置失敗")) + (successMsg === "" ? "" : " " + (successMsg + "號槍設置成功"));
  608. dialogBox("提示信息", promptMsg, null, null);
  609. return;
  610. }
  611. index += 1;
  612. if (index < nozzleLength) {
  613. WriteParameters(url,nozzleIds, index, parameters, errMsg, successMsg);
  614. }
  615. }
  616. });
  617. }
  618. function ReadBoardNozzleInitParameters(siteLevelNozzleId,callback=null) {
  619. //vm_config.advancedSettings.SiteLevelNozzleId = siteLevelNozzleId;
  620. var urlInfos = apis.get("ReadVrBoardNozzleInitParameters").split("/");
  621. var pn = urlInfos[2];
  622. var providerType = urlInfos[1];
  623. var tempUrl = basicUrl + "/u/?apitype=service&an=ReadVrBoardNozzleInitParameters&pn=" + pn + "&en=" + providerType;
  624. var requestData = new Array();
  625. requestData.push(siteLevelNozzleId);
  626. $.ajax({
  627. url: tempUrl,
  628. datatype: "application/json",
  629. type: 'post',
  630. contentType: "application/json;charset=utf-8;",
  631. data: JSON.stringify(requestData),
  632. beforeSend: function () {
  633. },
  634. success: function (data) {
  635. if (callback !== null) callback(data);
  636. },
  637. error: function (err) {
  638. if (callback !== null) callback(null);
  639. dialogBox("提示信息", siteLevelNozzleId+"號槍參數讀取失敗", null,null);
  640. }
  641. });
  642. }
  643. function calibrateBoardNozzleInitParameter(submitMode) {
  644. let validNumber = isNaN(vm_config.normalSettings.standardReadingValue);
  645. if (vm_config === undefined || vm_config.normalSettings.standardReadingValue === null ||
  646. vm_config.normalSettings.standardReadingValue === "" || isNaN(vm_config.normalSettings.standardReadingValue)) {
  647. dialogBox("提示信息", "請輸入有效的‘標準測定氣體體積’", null, null);
  648. return;
  649. }
  650. setSubmitMode(submitMode);
  651. var urlInfos = apis.get("CaculateVrBoardNozzleInitParameterCalibrationValue").split("/");
  652. var pn = urlInfos[2];
  653. var providerType = urlInfos[1];
  654. var tempUrl = basicUrl + "/u/?apitype=service&an=CaculateVrBoardNozzleInitParameterCalibrationValue&pn=" + pn + "&en=" + providerType;
  655. var requestData = new Array();
  656. requestData.push("油气脉冲当量");
  657. requestData.push(vm_config.normalSettings.currentConefficientValue);
  658. requestData.push(vm_config.normalSettings.currentReadingValue);
  659. requestData.push(parseFloat(parseFloat(vm_config.normalSettings.standardReadingValue).toFixed(2)));
  660. $.ajax({
  661. url: tempUrl,
  662. datatype: "application/json",
  663. type: 'post',
  664. contentType: "application/json;charset=utf-8;",
  665. data: JSON.stringify(requestData),
  666. beforeSend: function () {
  667. },
  668. success: function (data) {
  669. dialogBox("提示信息", "發送成功", null, null);
  670. vm_config.advancedSettings.BoardInitParameterConfigV1.油气脉冲当量 = parseInt(data);
  671. WriteBoardNozzleInitParameters();
  672. },
  673. error: function (err) {
  674. dialogBox("提示信息", "發送失敗", null, null);
  675. }
  676. });
  677. }
  678. function setSubmitMode(submitMode) {
  679. if (vm_config) {
  680. vm_config.submitType = submitMode;
  681. }
  682. }
  683. function modeChage(m) {
  684. vm_config.mode = m;
  685. }
  686. function GetVRBoardNozzleTrxFlowDatas(siteLevelNozzleId,page) {
  687. let path = '/sys/Vapor_Recovery_App/Application.VaporRecoveryApp.App/thing/service/';
  688. let arg = '[' + 'null,null,';
  689. let arg2 = ','+page+',2,"","",""]';
  690. if (siteLevelNozzleId === "") {
  691. if (vm_config.Nozzles && vm_config.Nozzles.length > 0) {
  692. vm_config.Nozzles.forEach(function (n) {
  693. arg = arg + n.SiteLevelNozzleId + arg2;
  694. console.log("publish2--GetVRBoardNozzleTrxFlowDatas-each:" + n.SiteLevelNozzleId);
  695. Publish2(arg, path, "GetVRBoardNozzleTrxFlowDatas");
  696. })
  697. }
  698. } else {
  699. arg = arg + siteLevelNozzleId + arg2;
  700. console.log("publish2-GetVRBoardNozzleTrxFlowDatas:" + siteLevelNozzleId + "currentIndex:" + page);
  701. Publish2(arg, path, "GetVRBoardNozzleTrxFlowDatas");
  702. }
  703. }
  704. function NextHistory(n) {
  705. if (n=== null || n.currentIndex === 0 || n.currentIndex < 0) {
  706. dialogBox("提示信息", "己經是最新記錄", null, null);
  707. return;
  708. }
  709. n.currentIndex = n.currentIndex - 1;
  710. GetVRBoardNozzleTrxFlowDatas(n.SiteLevelNozzleId, n.currentIndex)
  711. }
  712. function PreHistory(n) {
  713. if (n === null || n.VaporVolumeWithDecimalHistory === null) {
  714. dialogBox("提示信息", "沒有更多記錄了", null, null);
  715. return;
  716. }
  717. n.currentIndex = n.currentIndex + 1;
  718. GetVRBoardNozzleTrxFlowDatas(n.SiteLevelNozzleId, n.currentIndex)
  719. }
  720. </script>
  721. <style scoped>
  722. .HealthState {
  723. position: absolute;
  724. right: 2%;
  725. bottom: 4%;
  726. width: 20%;
  727. height: 25%;
  728. }
  729. .FuelingState {
  730. position: absolute;
  731. top: 20%;
  732. left: 0%;
  733. width: 100%;
  734. height: 80%;
  735. }
  736. .NozzleId {
  737. position: absolute;
  738. top: 0%;
  739. left: 0%;
  740. width: 100%;
  741. height: 15%;
  742. text-align: left;
  743. font-size: 1.375rem;
  744. font-weight: bold;
  745. /*border: 1px solid#ff0000*/
  746. }
  747. .NozzleDiv {
  748. position: relative;
  749. float: left;
  750. margin: 1%;
  751. width: 14.66%;
  752. height: 48%;
  753. /*border: 1px solid#ff0000;*/
  754. }
  755. .ALLable {
  756. position: relative;
  757. float: left;
  758. /*width: 15%;*/
  759. /*margin-left: 12%;*/
  760. width: 100%;
  761. height: 15%;
  762. text-align: right;
  763. font-size: 1.0rem;
  764. font-weight: bold;
  765. color: orange;
  766. padding-right: 14%;
  767. /*border: 1px solid#ff0000;*/
  768. }
  769. .ALLableData {
  770. position: relative;
  771. float: left;
  772. /*width: 85%;*/
  773. width: 100%;
  774. height: 15%;
  775. text-align: right;
  776. font-size: 1.0rem;
  777. font-weight: bold;
  778. padding-right: 14%;
  779. /*color:#808080;*/
  780. /* border: 1px solid#ff0000;*/
  781. }
  782. .ALDatas {
  783. position: relative;
  784. width: 50%;
  785. height:60%;
  786. float:left;
  787. /*height: 15%;*/
  788. /*border: 1px solid#ff0000;*/
  789. }
  790. .topALDatas{
  791. position:relative;
  792. width:100%;
  793. height:40%;
  794. padding-left:10%;
  795. /*border:1px solid #b6ff00*/
  796. }
  797. .topALTrans {
  798. position: relative;
  799. float:left;
  800. width: 26%;
  801. padding: 1%;
  802. height: 100%;
  803. /* border: 1px solid #00ffff;*/
  804. }
  805. .topALTransBolderRight{
  806. /*border-right:1px solid grey;*/
  807. margin-right:10%;
  808. }
  809. .topAL {
  810. position: relative;
  811. width: 100%;
  812. height: 25%;
  813. font-size: 0.9rem;
  814. text-align:right;
  815. /*border:1px solid red;*/
  816. }
  817. .topALLabel {
  818. position: relative;
  819. float: left;
  820. width: 100%;
  821. height: 25%;
  822. text-align: left;
  823. padding-left: 10%;
  824. color: orange;
  825. /*border: 1px solid red;*/
  826. }
  827. .toplabels {
  828. /*position:relative;
  829. float:left;
  830. height:100%;
  831. width:20%;
  832. font-size:0.9rem;*/
  833. /*border:1px solid red;*/
  834. position: absolute;
  835. left:0.5%;
  836. top:3%;
  837. height: 19.2%;
  838. width: 2.892%;
  839. font-size: 0.9rem;
  840. }
  841. .topALLabelData {
  842. position: relative;
  843. float: left;
  844. /*width: 85%;*/
  845. width: 100%;
  846. height: 100%;
  847. text-align: right;
  848. }
  849. .historyIcon {
  850. position: relative;
  851. float: left;
  852. width: 11%;
  853. margin-top: 8%;
  854. height: 75%;
  855. text-align: center;
  856. font-size: 2rem;
  857. font-weight: bolder;
  858. /*border: 1px solid deeppink;*/
  859. }
  860. .settingsBox {
  861. position: absolute;
  862. right: 0%;
  863. top: 0%;
  864. height: 100%;
  865. width: 17%;
  866. background-image: url("/WebConsole/images/onlineMonitor/chartView/background_query.png");
  867. background-repeat: no-repeat;
  868. background-size: 100% 100%;
  869. }
  870. input::-webkit-inner-spin-button, input::-webkit-outer-spin-button {
  871. -webkit-appearance: none;
  872. }
  873. input[type="number"] {
  874. -moz-appearance: textfield;
  875. }
  876. .settingsBody{
  877. width:100%;
  878. height:95%;
  879. }
  880. .modeDiv{
  881. width:100%;
  882. height:5%;
  883. }
  884. .modeButton{
  885. position:relative;
  886. display:flex;
  887. float:left;
  888. width:50%;
  889. height:100%;
  890. border:none;
  891. text-align:center;
  892. background-color:transparent;
  893. }
  894. .modeButtonActive {
  895. position: relative;
  896. display: flex;
  897. float: left;
  898. width: 50%;
  899. height: 100%;
  900. text-align: center;
  901. border: none;
  902. background-color:lightskyblue;
  903. }
  904. .modeSettingsLabel{
  905. position:relative;
  906. width:100%;
  907. height:10%;
  908. padding:1%;
  909. /*margin-left:2%;*/
  910. margin-bottom:4%;
  911. font-size:1rem;
  912. font-weight:bold;
  913. }
  914. .modeSettingsLabel-trans {
  915. position: relative;
  916. width: 100%;
  917. height: 10%;
  918. padding:0% 5% 0% 12%;
  919. /*margin-left:2%;*/
  920. margin-bottom: 4%;
  921. font-size: 1rem;
  922. }
  923. input {
  924. outline-color: #66afe9;
  925. border-radius: 3px;
  926. border-color: #ccc;
  927. }
  928. .inputPoistion{
  929. position:absolute;
  930. width:48%;
  931. right:5%;
  932. height:100%;
  933. padding:1%;
  934. }
  935. .inputButton {
  936. outline: 0;
  937. border-color: #66afe9;
  938. margin-bottom:6%;
  939. -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
  940. box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)
  941. }
  942. .submitButtonPosition{
  943. position:absolute;
  944. width:98%;
  945. margin:2%;
  946. height:15%;
  947. bottom:5%;
  948. text-align:center;
  949. }
  950. </style>