HighChartsMajorQuoteTrend.cshtml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. 
  2. @{
  3. Layout = null;
  4. }
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta name="viewport" content="width=device-width" />
  9. <title>HighChartsMajorQuoteTrend</title>
  10. <link href="~/easyui/themes/default/easyui.css" rel="stylesheet" />
  11. <link rel="stylesheet" type="text/css" href="~/easyui/themes/icon.css" />
  12. <link href="~/Content/css/bootstrap.min.css" rel="stylesheet" />
  13. <script src="~/Content/js/jquery.min.js"></script>
  14. <script src="~/Content/js/bootstrap.min.js"></script>
  15. <script src="~/easyui/jquery.easyui.min.js"></script>
  16. <script src="~/easyui/jquery.easyui.mobile.js"></script>
  17. <script src="~/easyui/locale/easyui-lang-zh_CN.js"></script>
  18. <script src="~/js/Utils.js"></script>
  19. <link href="~/Content/css/Style/Markets.css" rel="stylesheet" />
  20. <link href="~/Content/css/Styles.css" rel="stylesheet" />
  21. <script src="https://img.hcharts.cn/highcharts/highcharts.js"></script>
  22. <script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script>
  23. <script src="https://img.hcharts.cn/highcharts/modules/series-label.js"></script>
  24. <script src="https://img.hcharts.cn/highcharts/modules/oldie.js"></script>
  25. <script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script>
  26. </head>
  27. <body>
  28. <section class="hidden">
  29. <input id="hid_RegionID" name="hid_RegionID" type="hidden" value="@ViewBag.RegionID" />
  30. <input type="hidden" id="hid_ReportTitle" value="@ViewBag.ReportTitle" />
  31. <input id="hid_IsMarketSysAccount" name="hid_IsMarketSysAccount" type="hidden" value="@ViewBag.IsMarketSysAccount" />
  32. <input id="hid_IsSystem" name="hid_IsSystem" type="hidden" value="@ViewBag.IsSystem" />
  33. <input id="hid_MarketID" name="hid_MarketID" type="hidden" value="@ViewBag.MarketID" />
  34. <input id="hid_ChartType" name="hid_ChartType" type="hidden" value="LINE" />
  35. <input id="hid_NumberFormat" name="hid_NumberFormat" type="hidden" value="0" />
  36. <input id="hid_IsExportImage" name="hid_IsExportImage" type="hidden" value="N" />
  37. </section>
  38. <section id="Search_Panel">
  39. <table class="tableStyle1" style="Z-INDEX:101;LEFT:5px;WIDTH:1000px;TOP:20px;POSITION:absolute;">
  40. <tr>
  41. <td class="td1"><img alt="" src="../Images/icon_1.gif" />辖区工商:</td>
  42. <td class="td2">
  43. @*<input class="easyui-combotree" id="SearchRegionID" data-options="url:'/BaseInfo/GetTreeRegion',method:'post',loadFilter: function (rows) {
  44. return convert(rows);
  45. },onChange:function(newValue, oldValue){GetMarketSelStr()}" style="width:200px;height:20px" />*@
  46. <select class="easyui-combobox" id="SearchRegionID" style="width:220px;height:25px" data-options="onChange:function(newValue, oldValue){GetMarketSelStr()}">
  47. @Html.Raw(ViewBag.SelRegionID)
  48. </select>
  49. </td>
  50. <td class="td1"><img alt="" src="../Images/icon_1.gif" />隶属市场:</td>
  51. <td class="td2">
  52. <select class="easyui-combobox" style="height: 25px; width: 220px" id="SearchMarketID" name="SearchMarketID" data-options="">
  53. <option value="">全部</option>
  54. @Html.Raw(ViewBag.SelMarketInfo)
  55. </select>
  56. </td>
  57. <td class="td1"><img alt="" src="../Images/icon_1.gif" />商品名称:</td>
  58. <td class="td2">
  59. <select class="easyui-combobox" id="MajorGoods" style="height: 25px; width: 220px">
  60. @Html.Raw(ViewBag.SelMajorGoods)
  61. </select>
  62. </td>
  63. </tr>
  64. <tr>
  65. <td class="td1"><img alt="" src="../Images/icon_1.gif" />日期:</td>
  66. <td class="td2">
  67. <input class="easyui-datebox" type="text" id="SearchStartTime" name="SearchStartTime" style="height: 25px; width: 220px" data-options="" placeholder="开始日期" />
  68. </td>
  69. <td class="td1">到:</td>
  70. <td class="td2">
  71. <input class="easyui-datebox" type="text" id="SearchEndTime" name="SearchEndTime" style="height: 25px; width: 220px" data-options="" placeholder="截止日期" />
  72. </td>
  73. <td class="td1"><img alt="" src="../Images/icon_1.gif" />周期:</td>
  74. <td class="td2">
  75. <select style="height: 25px; width: 220px" id="cmbQueryCycle" name="cmbQueryCycle" onchange="f_CycleSelChanged()">
  76. <option value="1" selected>日</option>
  77. <option value="2">月</option>
  78. <option value="3">季</option>
  79. <option value="4">年</option>
  80. </select>
  81. </td>
  82. </tr>
  83. <tr>
  84. <td class="td1">
  85. <input type="radio" name="ChartType" value="LINE" style="margin: 5px 3px 0 0" checked="checked" /> 趋势图
  86. </td>
  87. <td class="td1" colspan="5">
  88. <div align="center">
  89. <a href="#" class="easyui-linkbutton" iconCls="icon-search" style="width: 90%; height: 25px" onclick="ChartQry();">查询</a>&nbsp;&nbsp;
  90. @*<input id="BtnPrintChart" type="button" onclick="PrintBtnClk()" style="width:60px" class="but1" value="打印图片" />&nbsp;&nbsp;
  91. <input id="BtnExportChart" type="button" onclick="ExportChartBtnClk()" style="width:60px" class="but1" value="导出图片" />*@
  92. </div>
  93. </td>
  94. </tr>
  95. </table>
  96. <div id="container" style="Z-INDEX: 103; LEFT: 5px; WIDTH: 70%; POSITION: absolute; TOP: 120px; HEIGHT: 70vh"></div>
  97. </section>
  98. <script>
  99. $(function() {
  100. var dInit = new Date();
  101. $("#SearchEndTime").datebox('setValue', dInit.format('yyyy-MM-dd'));
  102. dInit.setMonth(dInit.getMonth() - 1);
  103. $("#SearchStartTime").datebox('setValue', dInit.format('yyyy-MM-dd'));
  104. f_CycleSelChanged();
  105. $("#SearchRegionID").combobox("setValue", $('#hid_RegionID').val());
  106. LoadChart();
  107. ChartQry();
  108. });
  109. var chart;
  110. function LoadChart() {
  111. chart = Highcharts.chart('container', {
  112. chart: {
  113. type: 'line',
  114. renderTo: 'container',
  115. events: {
  116. //load: ChartQry
  117. }
  118. },
  119. credits: {
  120. enabled:false
  121. },
  122. title: {
  123. text: '园区主要商品价格走势图'
  124. },
  125. subtitle: {
  126. text: ''
  127. },
  128. xAxis: {
  129. categories: []
  130. },
  131. yAxis: {
  132. title: {
  133. text: '价格'
  134. }
  135. },
  136. plotOptions: {
  137. line: {
  138. dataLabels: {
  139. // 开启数据标签
  140. enabled: true
  141. }
  142. // 关闭鼠标跟踪,对应的提示框、点击事件会失效
  143. //enableMouseTracking: false
  144. }
  145. },
  146. series: [{
  147. name: '最高价',
  148. color: '#C85B6F',
  149. data: []
  150. }, {
  151. name: '最低价',
  152. color: '#15AE67',
  153. data: []
  154. }, {
  155. name: '平均价',
  156. color: 'gray',
  157. data: []
  158. }],
  159. exporting: {
  160. enabled: true,
  161. url:"https://export.highcharts.com"
  162. }
  163. });
  164. }
  165. function ChartQry() {
  166. var sDate, eDate;
  167. sDate = $("#SearchStartTime").datebox('getValue');
  168. eDate = $("#SearchEndTime").datebox('getValue');
  169. var days = better_time(eDate, sDate);
  170. if (days <= 0) {
  171. alert("时间间隔无效,请确保结束时间 大于 开始时间!");
  172. return false;
  173. }
  174. var cycle = document.getElementById("cmbQueryCycle").value;
  175. if (cycle == '1') {
  176. if (days >= 60) {
  177. alert("时间间隔最大为60天!");
  178. return false;
  179. }
  180. }
  181. else if (cycle == '2') {
  182. if (days >= 730) {
  183. alert("时间间隔最大为24个月!");
  184. return false;
  185. }
  186. }
  187. else if (cycle == '3') {
  188. if (days >= 1095) {
  189. alert("时间间隔最大为16个季度!");
  190. return false;
  191. }
  192. }
  193. var regionId = $("#SearchRegionID").combobox("getValue"),
  194. marketId = $("#SearchMarketID").combobox("getValue"),
  195. MajorGoods = $("#MajorGoods").combobox("getValue"),
  196. startTime = sDate,
  197. endTime = eDate,
  198. cmbQueryCycle = $("#cmbQueryCycle").val();
  199. $.ajax({
  200. url: '@Url.Action("ShowChartMajorQuoteTrend", "DataCharts")', // 查询接口
  201. type: 'post',
  202. dataType: 'json', // 查询接口返回的数据类型
  203. timeout: 1000000, // 单位=毫秒。为了测试写成1000秒,正式环境下可改为20秒
  204. data: {
  205. RegionID: regionId,
  206. MarketID: marketId,
  207. StartTime: startTime,
  208. EndTime: endTime,
  209. cmbQueryCycle:cmbQueryCycle,
  210. MajorGoods: MajorGoods
  211. },
  212. success: function (data) {
  213. console.log(data);
  214. // 查询接口无数据返回
  215. if (data==null || data.length <= 0) {
  216. return;
  217. }
  218. var count = data.length;
  219. var categories = [];
  220. var series1 = [];
  221. var series2 = [];
  222. var series3 = [];
  223. data.forEach(function(e) {
  224. categories.push(e.QUOTE_DATE);
  225. series1.push(e.QUOTE_HIGH);
  226. series2.push(e.QUOTE_LOW);
  227. series3.push(e.QUOTE_AVG);
  228. });
  229. chart.xAxis[0].setCategories(categories);
  230. // 设置x轴label间隔,否则可能因为数据量而过密
  231. var step = Math.ceil(count / 10.0);
  232. if (step < 1) { step = 1; }
  233. //chart.xAxis[0].options.labels.step = step;
  234. chart.xAxis[0].options.tickInterval = step;
  235. // 设置各series的数据
  236. chart.series[0].setData(series1);
  237. chart.series[1].setData(series2);
  238. chart.series[2].setData(series3);
  239. chart.redraw();
  240. },
  241. // 捕获出错信息(服务器应答超时、返回数据不是json格式等,用于调试)
  242. error: function(xmlHttpRequest, textStatus) {
  243. //layer.alert(textStatus, {icon:2, title: '提示信息' });
  244. $.messager.alert("", textStatus);
  245. },
  246. cache: false
  247. });
  248. }
  249. // '查询周期'选择变化
  250. function f_CycleSelChanged()
  251. {
  252. var obj = $('#cmbQueryCycle').val();
  253. // 结束日期
  254. var dateE = new Date();
  255. //document.getElementById("SearchEndTime").value = dateE.format(dateE);
  256. $("#SearchEndTime").datebox('setValue', dateE.format('yyyy-MM-dd'));
  257. // 开始日期
  258. var dateB = new Date();
  259. if (obj== "1") {
  260. dateB.setDate(dateE.getDate() - 30);
  261. }
  262. else if (obj== "2") {
  263. dateB.setMonth(dateE.getMonth() - 6);
  264. }
  265. else if (obj == "3") {
  266. dateB.setMonth(dateE.getMonth() - 16);
  267. }
  268. else {
  269. dateB.setYear(dateE.getFullYear() - 6);
  270. }
  271. $("#SearchStartTime").datebox('setValue', dateB.format('yyyy-MM-dd'));
  272. }
  273. //根据辖区获取市场下拉框的option
  274. function GetMarketSelStr() {
  275. $.ajax({
  276. url: "/GetResult/GetMarketSelStrResult",
  277. type: "post",
  278. async:false,
  279. dataType: "json",
  280. data: { RegionID: $("#SearchRegionID").combobox("getValue") },
  281. success: function (data) {
  282. if (CheckAajxData(data) === false) return;
  283. var rows = data.rows;
  284. var first = "{\"MarketID\":\"\",\"Names\":\"全部\"}";
  285. var firstJson = JSON.parse(first);
  286. rows.unshift(firstJson);
  287. $('#SearchMarketID').combobox("clear").combobox({
  288. data: rows,
  289. valueField: 'MarketID',
  290. textField: 'Names'
  291. });
  292. }
  293. });
  294. }
  295. //返回两个时间的天数:要求比较的时间的格式为:YYYY-MM-DD
  296. function better_time(strDateStart, strDateEnd) {
  297. strDateStart = strDateStart.replace("/", "-").replace("/", "-");
  298. strDateEnd = strDateEnd.replace("/", "-").replace("/", "-");
  299. var strSeparator = "-"; //日期分隔符
  300. var strDateArrayStart;
  301. var strDateArrayEnd;
  302. var intDay;
  303. if (strDateStart == "" || strDateEnd == "") {
  304. //alert("ddddddd");
  305. }
  306. strDateArrayStart = strDateStart.split(strSeparator);
  307. strDateArrayEnd = strDateEnd.split(strSeparator);
  308. var strDateS = new Date(strDateArrayStart[0] + "/" + strDateArrayStart[1] + "/" + strDateArrayStart[2]);
  309. var strDateE = new Date(strDateArrayEnd[0] + "/" + strDateArrayEnd[1] + "/" + strDateArrayEnd[2]);
  310. intDay = (strDateS - strDateE) / (1000 * 3600 * 24);
  311. return intDay;
  312. }
  313. Date.prototype.format = function(format)
  314. {
  315. var o = {
  316. "M+" : this.getMonth()+1, //month
  317. "d+" : this.getDate(), //day
  318. "h+" : this.getHours(), //hour
  319. "m+" : this.getMinutes(), //minute
  320. "s+" : this.getSeconds(), //second
  321. "q+" : Math.floor((this.getMonth()+3)/3), //quarter
  322. "S" : this.getMilliseconds() //millisecond
  323. }
  324. if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
  325. (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  326. for(var k in o)if(new RegExp("("+ k +")").test(format))
  327. format = format.replace(RegExp.$1,
  328. RegExp.$1.length==1 ? o[k] :
  329. ("00"+ o[k]).substr((""+ o[k]).length));
  330. return format;
  331. }
  332. </script>
  333. </body>
  334. </html>