RealTimeCurves.cshtml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. @{
  2. ViewBag.Title = "RealCurve";
  3. Layout = "~/Views/Shared/_LayoutIndex.cshtml";
  4. }
  5. <script src="~/Content/scripts/plugins/echarts/echarts.min.js" type="text/javascript"></script>
  6. <style>
  7. .curveContainer ul {
  8. width: 100%;
  9. height: 100%;
  10. }
  11. .curveContainer li {
  12. float: left;
  13. width: 50%;
  14. height: 50%;
  15. line-height: 30px;
  16. text-align: center;
  17. list-style: none;
  18. padding: 20px;
  19. border: 1px solid gray;
  20. }
  21. </style>
  22. <script>
  23. $(function () {
  24. init();
  25. initControl();
  26. getAllDevice();
  27. exchange();
  28. })
  29. var waterWellTypes = {
  30. "Pressure":"压力",
  31. "InstantaneousFlow":"瞬时流量"
  32. }
  33. // 初始化界面
  34. function init() {
  35. // 设置
  36. $(".curveContainer").css({ "height": ($(window).height() - 150) + "px" });
  37. //layout布局
  38. $('#layout').layout({
  39. applyDemoStyles: true,
  40. onresize: function () {
  41. $(window).resize();
  42. }
  43. });
  44. // resize重设宽高
  45. $(window).resize(function (e) {
  46. window.setTimeout(function () {
  47. $(".curveContainer").css({ "height": ($(window).height() - 150) + "px" })
  48. }, 200);
  49. e.stopPropagation();
  50. });
  51. }
  52. // 初始化控件
  53. function initControl() {
  54. // 初始化类型下拉列表
  55. $("#type_menu .dropdown-menu li").click(function () {
  56. var text = $(this).find('a').html();
  57. var value = $(this).find('a').attr('data-value');
  58. $("#type_menu .dropdown-text").html(text).attr('data-value', value);
  59. });
  60. // 初始化行下拉列表
  61. $("#line_menu .dropdown-menu li").click(function () {
  62. var text = $(this).find('a').html();
  63. var value = $(this).find('a').attr('data-value');
  64. $("#line_menu .dropdown-text").html(text).attr('data-value', value);
  65. });
  66. // 初始化列下拉列表
  67. $("#column_menu .dropdown-menu li").click(function () {
  68. var text = $(this).find('a').html();
  69. var value = $(this).find('a').attr('data-value');
  70. $("#column_menu .dropdown-text").html(text).attr('data-value', value);
  71. });
  72. }
  73. // 获取所有测点
  74. var allDevice = [];
  75. function getAllDevice() {
  76. $.ajax({
  77. type: "GET",
  78. url: "/PipeNetworkManage/Meter/GetMeters",//路径
  79. data: {},
  80. async:false,
  81. dataType: 'json',
  82. success: function (result) {
  83. if (result !== "") {
  84. allDevice = result;
  85. }
  86. }
  87. });
  88. }
  89. // 页码点击事件
  90. function pageClick(page) {
  91. $(page).siblings().removeClass("active").end().addClass("active");
  92. setEchartsOptions(numOfPage, $(page).text(), type);
  93. }
  94. var numOfPage = 0;
  95. var type = "";
  96. // 切换按钮
  97. function exchange() {
  98. var line = $("#line_menu").find('.dropdown-text').attr('data-value');
  99. var column = $("#column_menu").find('.dropdown-text').attr('data-value');
  100. type = $("#type_menu").find('.dropdown-text').attr('data-value');
  101. // 验证
  102. if (allDevice.length === 0) return alert("未获取到设备信息列表,不能进行查询!");
  103. if (!type) return alert("请选择类型!");
  104. if (!line) return alert("请选择行!");
  105. if (!column) return alert("请选择列!");
  106. // 计算一页显示几个
  107. numOfPage = line * column;
  108. // 添加li
  109. var strOfView = "";
  110. for (var i = 0; i < numOfPage; i++) {
  111. strOfView += '<li><div style="width: 100%;height: 90%;" id="nowChart' + i + '" class="echatDiv"></div><a id="waterTitle' + i + '">' + allDevice[i].MeterAssessmentName + '</a></li>';
  112. }
  113. // 计算显示几页(上取整)
  114. var pagesNumber = Math.ceil(allDevice.length / numOfPage);
  115. // 添加页码
  116. var strOfPage = "";
  117. for (var i = 0; i < pagesNumber; i++) {
  118. if (i === 0) {
  119. strOfPage += '<li class="active"><a href="#">'+(i + 1)+'</a></li>';
  120. } else {
  121. strOfPage += '<li><a href="#">'+(i + 1)+'</a></li>';
  122. }
  123. }
  124. $(".curveContainer ul").html(strOfView);
  125. $("#pager ul").html(strOfPage);
  126. // 切换按钮,计算高度,宽度
  127. $(".curveContainer li").css({ "width": (1 / column * 100) + '%', "height": (1 / line * 100) + '%' });
  128. // 页码点击事件
  129. $("#pager ul li").on("click", function () {
  130. pageClick(this);
  131. })
  132. setEchartsOptions(numOfPage, 1, type);
  133. }
  134. // 清空按钮
  135. function clearAll() {
  136. alert("clearAll");
  137. }
  138. // 设置曲线
  139. function setEchartsOptions(numOfPage, nowPage, type) {
  140. // 判断本页显示多少个曲表
  141. // 获取到本页前一页显示了多少条数据
  142. var haveShowNumber = numOfPage * (nowPage - 1);
  143. // 获取所有测点的数量
  144. var devicesLength = allDevice.length;
  145. // 计算当前页需要显示多少个图表
  146. var numOfTables = (devicesLength - haveShowNumber > numOfPage ? numOfPage : devicesLength - haveShowNumber);
  147. // 获取需要请求的数据表表名
  148. var tableNames = [];
  149. var waterWellNames = [];
  150. for (var i = 0; i < numOfTables; i++) {
  151. tableNames.push("MeterAssessment_" + allDevice[haveShowNumber + i].MeterAssessmentId);
  152. waterWellNames.push(allDevice[haveShowNumber + i].MeterAssessmentName);
  153. }
  154. // 请求数据
  155. $.ajax({
  156. url: '/PipeNetworkManage/RealTimeMonitoring/GetRealCurves',
  157. data: { tableNames: JSON.stringify(tableNames), type: type },
  158. type: 'get',
  159. dataType: 'json',
  160. cache: false,
  161. success: function (datas) {
  162. if (datas) {
  163. for (var i = 0; i < tableNames.length; i++) {
  164. var nowChartId = 'nowChart' + i;
  165. var seriesData = [];
  166. var times = [];
  167. var name = "";
  168. var waterWellName = "";
  169. if (datas[tableNames[i]]) {
  170. for (var j = 0 ; j < datas[tableNames[i]].length; j++) {
  171. seriesData.push(datas[tableNames[i]][j].Value);
  172. times.push(datas[tableNames[i]][j].Date);
  173. }
  174. }
  175. name = waterWellTypes[type];
  176. $("#" + ("waterTitle" + i)).html(waterWellNames[i]);
  177. setDatas(nowChartId, seriesData, times, name);
  178. }
  179. }
  180. }
  181. });
  182. }
  183. // 设置数据
  184. function setDatas(nowChartId, seriesData, times, name) {
  185. var nowChart = echarts.init(document.getElementById((nowChartId)));
  186. // 指定图表的配置项和数据
  187. var option = {
  188. title: {
  189. text: name + '分析',
  190. x: 'center',
  191. align: 'right'
  192. },
  193. tooltip: {
  194. trigger: 'axis',
  195. },
  196. legend: {
  197. data: [name],
  198. x: 'left'
  199. },
  200. xAxis: {
  201. boundaryGap: false,
  202. data: times.map(function (str) {
  203. return str.replace(' ', '\n')
  204. })
  205. },
  206. yAxis: [
  207. {
  208. name: '单位',
  209. type: 'value'
  210. }
  211. ],
  212. series: [{
  213. name: name,
  214. type: 'line',
  215. data: seriesData,
  216. markLine: {
  217. data: [
  218. { type: 'max', name: '最大值', itemStyle: { normal: { color: '#dc143c' } } },
  219. { type: 'min', name: '最小值', itemStyle: { normal: { color: '#dc143c' } } },
  220. { type: 'average', name: '平均值', itemStyle: { normal: { color: '#dc143c' } } }
  221. ]
  222. }
  223. }]
  224. };
  225. // 使用刚指定的配置项和数据显示图表。
  226. nowChart.setOption(option);
  227. }
  228. </script>
  229. <div class="ui-layout" id="layout" style="height: 100%; width: 100%;">
  230. <div class="ui-layout-center">
  231. <div class="center-Panel">
  232. <div id="tabs">
  233. <div id="tabs-1">
  234. <div class="titlePanel">
  235. <div class="title-search">
  236. <table>
  237. <tr>
  238. <td style="padding-left: 10px;">查询类型:</td>
  239. <td style="padding-left: 10px;">
  240. <div id="type_menu" class="btn-group">
  241. <a class="btn btn-default dropdown-text" data-toggle="dropdown" data-value="InstantaneousFlow">瞬时流量</a>
  242. <a class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
  243. <ul class="dropdown-menu">
  244. <li><a data-value="Pressure">压力</a></li>
  245. <li><a data-value="InstantaneousFlow">瞬时流量</a></li>
  246. </ul>
  247. </div>
  248. </td>
  249. <td style="padding-left: 10px;">
  250. <div id="line_menu" class="btn-group">
  251. <a class="btn btn-default dropdown-text" data-toggle="dropdown" data-value="2">2行</a>
  252. <a class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
  253. <ul class="dropdown-menu">
  254. <li><a data-value="1">&nbsp;1行</a></li>
  255. <li><a data-value="2">&nbsp;2行</a></li>
  256. </ul>
  257. </div>
  258. </td>
  259. <td style="padding-left: 10px;">
  260. <div id="column_menu" class="btn-group">
  261. <a class="btn btn-default dropdown-text" data-toggle="dropdown" data-value="3">3列</a>
  262. <a class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
  263. <ul class="dropdown-menu">
  264. <li><a data-value="1">&nbsp;1列</a></li>
  265. <li><a data-value="2">&nbsp;2列</a></li>
  266. <li><a data-value="3">&nbsp;3列</a></li>
  267. </ul>
  268. </div>
  269. </td>
  270. <td>
  271. <span>&nbsp;&nbsp;</span>
  272. <a id="exchange_btn" class="btn btn-primary" onclick="exchange()"><i class="fa fa-exchange"></i>&nbsp;切换</a>
  273. @* <a id="clear_btn" class="btn btn-danger" onclick="clearAll()"><i class="fa fa-trash"></i>&nbsp;清空</a>*@
  274. </td>
  275. </tr>
  276. </table>
  277. </div>
  278. <div class="toolbar">
  279. <div class="btn-group">
  280. @*<a id="lr-replace" class="btn btn-default" onclick="reload();"><i class="fa fa-refresh"></i>&nbsp;刷新</a>*@
  281. </div>
  282. </div>
  283. </div>
  284. <div class="curveContainer">
  285. <ul>
  286. </ul>
  287. </div>
  288. <div id="pager" class="text-center">
  289. <ul class="pagination">
  290. </ul>
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. </div>
  296. </div>