MajorQuoteMultiHighCharts.cshtml 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. 
  2. @{
  3. Layout = null;
  4. }
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8. <meta name="viewport" content="width=device-width" />
  9. <title>MajorQuoteMultiHighCharts</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. <link href="~/Content/js/plugins/layer/skin/layer.css" rel="stylesheet" />
  14. @*<script src="~/Content/js/jquery.min.js"></script>*@
  15. <script src="~/Content/plugins/highcharts/jquery.min.js"></script>
  16. @*<script src="~/easyui/jquery.easyui.min.js"></script>
  17. <script src="~/easyui/jquery.easyui.mobile.js"></script>
  18. <script src="~/easyui/locale/easyui-lang-zh_CN.js"></script>*@
  19. <script src="~/Content/js/plugins/layer/laydate/laydate.js"></script>
  20. <script src="~/Content/js/plugins/layer/layer.min.js"></script>
  21. <script src="~/js/Utils.js"></script>
  22. <link href="~/Content/css/Styles.css" rel="stylesheet" />
  23. <link href="~/Content/css/style.min862f.css" rel="stylesheet" />
  24. <script src="~/Content/plugins/highcharts/highcharts.js"></script>
  25. <script type="text/javascript" src="~/Content/plugins/highcharts/modules/exporting.js"></script>
  26. </head>
  27. <body>
  28. <section class="hidden">
  29. <input type="hidden" id="hid_ReportTitle" value="@ViewBag.ReportTitle" />
  30. <input id="hid_IsMarketSysAccount" name="hid_IsMarketSysAccount" type="hidden" value="@ViewBag.IsMarketSysAccount" />
  31. <input id="hid_MarketID" name="hid_MarketID" type="hidden" value="@ViewBag.MarketID" />
  32. <input id="hid_RegionID" name="hid_RegionID" type="hidden" value="@ViewBag.RegionID" />
  33. <input id="hid_ChartType" name="hid_ChartType" type="hidden" value="LINE" />
  34. <input id="hid_NumberFormat" name="hid_NumberFormat" type="hidden" value="0" />
  35. <input id="hid_IsExportImage" name="hid_IsExportImage" type="hidden" value="N" />
  36. </section>
  37. <table class="tableStyle1" style="Z-INDEX:101;LEFT:5px;WIDTH:725px;TOP:10px;POSITION:absolute;">
  38. <tr>
  39. <td class="td1"><img alt="" src="../Images/icon_1.gif" />辖区工商:</td>
  40. <td class="td2">
  41. <select id="RegionID" style="height: 25px; width: 200px" onchange="GetMarketSelStr()">
  42. @Html.Raw(ViewBag.SelRegionID)
  43. </select>
  44. </td>
  45. <td class="td1"><img alt="" src="../Images/icon_1.gif" />隶属市场:</td>
  46. <td class="td2" colspan="3">
  47. <select style="height: 25px; width: 200px" id="SearchMarketID" name="SearchMarketID">
  48. @*@Html.Raw(ViewBag.SelMarketInfo)*@
  49. </select>
  50. </td>
  51. </tr>
  52. <tr>
  53. <td class="td1"><img alt="" src="../Images/icon_1.gif" />商品品种:</td>
  54. <td class="td2" colspan="7" height="70px">
  55. <div style="margin-top:0px">
  56. @Html.Raw(ViewBag.SelMajorGoods)
  57. </div>
  58. </td>
  59. </tr>
  60. <tr>
  61. <td class="td1"><img alt="" src="../Images/icon_1.gif" />日期:</td>
  62. <td class="td2">
  63. <input class="laydate-icon layer-date" type="text" id="SearchStartTime" name="SearchStartTime" style="height: 25px; width: 200px" data-options="" placeholder="开始日期" />
  64. </td>
  65. <td class="td1">到:</td>
  66. <td class="td2">
  67. <input class="laydate-icon layer-date" type="text" id="SearchEndTime" name="SearchEndTime" style="height: 25px; width: 200px" data-options="" placeholder="截止日期" />
  68. </td>
  69. <td class="td1"><img alt="" src="../Images/icon_1.gif" />周期:</td>
  70. <td class="td2">
  71. <select style="height: 25px; width: 200px" id="cmbQueryCycle" name="cmbQueryCycle" onchange="f_CycleSelChanged()">
  72. <option value="1" selected>日</option>
  73. <option value="2">月</option>
  74. <option value="3">季</option>
  75. <option value="4">年</option>
  76. </select>
  77. </td>
  78. </tr>
  79. <tr>
  80. <td class="td1">
  81. <input type="radio" id="RadioButtonLF" name="ChartType" value="1" style="margin: 5px 3px 0 0" oncl /> 趋势图
  82. <input type="radio" ID="RadioButtonL" name="ChartType" value="0" style="margin: 5px 3px 0 0" checked="checked" /> 趋势图Ex
  83. </td>
  84. <td class="td1" colspan="7">
  85. <div align="center">
  86. <div align="center">
  87. <input id="BtnPrintChart" type="button" class="but1" style=" height: 25px" onclick="LoadChart();" value="查询" />&nbsp;&nbsp;
  88. <input id="BtnPrintChart" type="button" onclick="PrintBtnClk()" style="width:60px" class="but1" value="打印图片" />&nbsp;&nbsp;
  89. <input id="BtnExportChart" type="button" onclick="ExportChartBtnClk()" style="width:60px" class="but1" value="导出图片" />
  90. </div>
  91. </div>
  92. </td>
  93. </tr>
  94. </table>
  95. <div id="container" style="Z-INDEX: 103; LEFT: 5px; WIDTH: 1000px; POSITION: absolute; TOP: 340px; HEIGHT: 400px"></div>
  96. <script>
  97. function GetMarketSelStr() {
  98. $.ajax({
  99. url: "/GetResult/GetMarketSelStrResult",
  100. type: "post",
  101. async: false,
  102. dataType: "json",
  103. //data: { RegionID: $("input.combobox-value[name='SearchRegionID']").val() },
  104. data: { RegionID: $("#RegionID").val() },
  105. success: function (data) {
  106. //console.log(msg);
  107. if (CheckAajxData(data) === false) return;
  108. var rows = data.rows;
  109. $('#SearchMarketID').empty();
  110. $('#SearchMarketID').append("<option value=''>全部</option>");
  111. for (var i = 0; i < rows.length; i++) {
  112. $('#SearchMarketID').append("<option value='" + rows[i].MarketID + "'>" + rows[i].Names + "</option>")
  113. }
  114. }
  115. });
  116. }
  117. //var _fixedCategory = $("input[name='ChartType'][checked]").val();
  118. var chart;
  119. function LoadChart() {
  120. chart = new Highcharts.Chart({
  121. chart: {
  122. renderTo: 'container',
  123. defaultSeriesType: 'spline',
  124. events: {
  125. load: ChartQry
  126. }
  127. },
  128. title: {
  129. text: $('#hid_ReportTitle').val()
  130. },
  131. xAxis: {
  132. tickWidth: 3,
  133. minPadding: 0.1,
  134. maxPadding: 0.1,
  135. //gridLineWidth:1,
  136. endOnTick: false,
  137. //tickPixelInterval : 125, // 对固定Category的x轴不适用
  138. type: 'datetime', // x轴无固定Category,必须用datetime类型
  139. labels: {
  140. rotation: 0,
  141. align: 'center',
  142. formatter: function () {
  143. // Date.UTC值是长整数,转换成日期格式
  144. var strDate = Highcharts.dateFormat('%Y/%m/%d', this.value);
  145. var days = strDate.split('/');
  146. if ($('#cmbQueryCycle').val() == '1') {
  147. return days[1] + '/' + days[2];
  148. } else if ($('#cmbQueryCycle').val() == '2') {
  149. return days[0] + '/' + days[1];
  150. } else if ($('#cmbQueryCycle').val() == '3') {
  151. return days[0] + '/' + days[1];
  152. } else {
  153. return days[0];
  154. }
  155. }
  156. }
  157. },
  158. yAxis: {
  159. title: {
  160. text: ''
  161. }
  162. },
  163. tooltip: {
  164. enabled: true,
  165. formatter: function () {
  166. return '<b>' + this.series.name + '</b><br/>' +
  167. Highcharts.dateFormat('%Y-%m-%d', this.x) + ': ' +
  168. Highcharts.numberFormat(this.y, 2) + '元';
  169. }
  170. },
  171. exporting: {
  172. buttons: {
  173. printButton: {
  174. enabled: false
  175. },
  176. exportButton: {
  177. enabled: false,
  178. menuItems: [{
  179. text: 'PNG格式',
  180. onclick: function () {
  181. this.exportChart({
  182. type: 'image/png',
  183. width: 1200
  184. });
  185. }
  186. }, {
  187. text: 'JPG格式',
  188. onclick: function () {
  189. this.exportChart({
  190. type: 'image/jpeg',
  191. width: 1200
  192. });
  193. }
  194. },
  195. null,
  196. null]
  197. }
  198. },
  199. //url: 'HighchartsExport.aspx',
  200. url: 'http://export.highcharts.com',
  201. filename: 'MyChart',
  202. width: 1200
  203. },
  204. plotOptions: {
  205. spline: {
  206. dataLabels: {
  207. enabled: true, // 是否在线上各点标注y轴数值
  208. formatter: function () {
  209. return Highcharts.numberFormat(this.y, 2);
  210. }
  211. },
  212. enableMouseTracking: true
  213. }
  214. },
  215. credits: {
  216. enabled: false
  217. },
  218. series: []
  219. });
  220. }
  221. //返回两个时间的天数:要求比较的时间的格式为:YYYY-MM-DD
  222. function better_time(strDateStart, strDateEnd) {
  223. strDateStart = strDateStart.replace("/", "-").replace("/", "-");
  224. strDateEnd = strDateEnd.replace("/", "-").replace("/", "-");
  225. var strSeparator = "-"; //日期分隔符
  226. var strDateArrayStart;
  227. var strDateArrayEnd;
  228. var intDay;
  229. if (strDateStart == "" || strDateEnd == "") {
  230. //alert("ddddddd");
  231. }
  232. strDateArrayStart = strDateStart.split(strSeparator);
  233. strDateArrayEnd = strDateEnd.split(strSeparator);
  234. var strDateS = new Date(strDateArrayStart[0] + "/" + strDateArrayStart[1] + "/" + strDateArrayStart[2]);
  235. var strDateE = new Date(strDateArrayEnd[0] + "/" + strDateArrayEnd[1] + "/" + strDateArrayEnd[2]);
  236. intDay = (strDateS - strDateE) / (1000 * 3600 * 24);
  237. return intDay;
  238. }
  239. //alert($('#hid_IsExportImage').val())
  240. var _IsExportImage = 'N';
  241. function ChartQry() {
  242. var sDate, eDate;
  243. sDate = document.getElementById("SearchStartTime").value;
  244. eDate = document.getElementById("SearchEndTime").value;
  245. //var MarketIDs = document.getElementById("MarketIDs");
  246. //var strs = "";
  247. //for (var i = 0; i < MarketIDs.length; i++) {
  248. // //marketIds += marketIds == "" ? MarketIDs[i] : ',' + MarketIDs[i];
  249. // if (MarketIDs.options[i].selected) {
  250. // strs += MarketIDs.options[i].value + ",";
  251. // }
  252. //}
  253. //if (strs.length > 0) {
  254. // strs = strs.substr(0, strs.length - 1)
  255. //}
  256. var strSel = '';
  257. $("[name='chkMajor']:checked").each(function (index, element) {
  258. strSel += $(this).val() + ",";
  259. });
  260. if (strSel.length > 0) {
  261. strSel = strSel.substr(0, strSel.length - 1)
  262. }
  263. if (strSel.length <= 0) {
  264. //alert("请选择一个商品进行查看!");
  265. return;
  266. }
  267. //var MajorGoods = $("#MajorGoods").val()
  268. var fixedCategory = $("input[name='ChartType'][checked]").val();
  269. var startTime = $('#SearchStartTime').val()
  270. var endTime = $('#SearchEndTime').val()
  271. var chartType = $("#hid_ChartType").val()
  272. var reportType = $("#hid_ReportType").val()
  273. var cmbQueryCycle = $("#cmbQueryCycle").val();
  274. $.ajax({
  275. url: '@Url.Action("ShowMajorQuoteMultiHighCharts", "DataCharts")', // 查询接口
  276. type: 'post',
  277. dataType: 'json', // 查询接口返回的数据类型
  278. timeout: 1000000, // 单位=毫秒。为了测试写成1000秒,正式环境下可改为20秒
  279. data: {
  280. MarketID: $('#SearchMarketID').val(),
  281. MajorGoods: strSel,
  282. startTime: startTime,
  283. endTime: endTime,
  284. chartType: chartType,
  285. cmbQueryCycle: cmbQueryCycle,
  286. fixedCategory: fixedCategory,
  287. RegionID: $('#RegionID').val(),
  288. IsExportImage: _IsExportImage
  289. },
  290. success: function (srv_resp, textStatus) {
  291. // 查询接口无数据返回
  292. var count = eval(srv_resp.__totalcount);
  293. if (count == "" || count == null || count == "undefined" || count <= 0) {
  294. return;
  295. }
  296. var step = Math.ceil(count / 10.0);
  297. if (step < 1) { step = 1; }
  298. if ($("#hid_ChartType").val() == 'LINE' && fixedCategory == '1') {
  299. chart.xAxis[0].setCategories(srv_resp.__categories);
  300. if (srv_resp.__series.length > 0) {
  301. // 设置x轴label间隔,否则可能因为数据量而过密
  302. //chart.xAxis[0].options.labels.step = step;
  303. chart.xAxis[0].options.tickInterval = step;
  304. // 设置各series的数据
  305. for (var i = 0; i < srv_resp.__series.length; i++) {
  306. chart.addSeries({
  307. name: srv_resp.__names[i],
  308. data: srv_resp.__series[i]
  309. }, false);
  310. }
  311. chart.redraw();
  312. }
  313. }
  314. else if ($("#hid_ChartType").val() == 'LINE' && fixedCategory=='0') {
  315. if (srv_resp.__series == null) {
  316. return;
  317. }
  318. if (srv_resp.__series.length > 0) {
  319. // 设置x轴label间隔,否则可能因为数据量而过密
  320. if ($('#cmbQueryCycle').val() == '1') {
  321. chart.xAxis[0].options.tickInterval= step * 24 * 3600 * 1000;
  322. } else if ($('#cmbQueryCycle').val() == '2') {
  323. chart.xAxis[0].options.tickInterval= 30 * step * 24 * 3600 * 1000;
  324. } else if ($('#cmbQueryCycle').val() == '3') {
  325. chart.xAxis[0].options.tickInterval= 90 * step * 24 * 3600 * 1000;
  326. }else {
  327. chart.xAxis[0].options.tickInterval= 365 * step * 24 * 3600 * 1000;
  328. }
  329. // 设置各series的数据
  330. for (var i = 0; i < srv_resp.__series.length; i++) {
  331. var addFlag = 1;
  332. for (var j = 0; j < srv_resp.__series[i].length; j++) {
  333. // 把数据中的日期转换成Data.UTC值
  334. var temp = srv_resp.__series[i][j].x;
  335. if (temp != null) {
  336. var days = temp.split('/');
  337. // 日统计
  338. if ($('#cmbQueryCycle').val() == '1') {
  339. if (days.length == 3) {
  340. srv_resp.__series[i][j].x = Date.UTC(days[0], days[1]-1, days[2]);
  341. }
  342. }
  343. // 月统计
  344. else if ($('#cmbQueryCycle').val() == '2') {
  345. if (days.length == 2) {
  346. srv_resp.__series[i][j].x = Date.UTC(days[0], days[1]-1, 1);
  347. }
  348. }
  349. // 季统计(x轴类型为datetime,季度必须转换到月份)
  350. else if ($('#cmbQueryCycle').val() == '3') {
  351. if (days.length == 2) {
  352. srv_resp.__series[i][j].x = Date.UTC(days[0], 3*(days[1]-1), 1);
  353. }
  354. }
  355. // 年统计
  356. else {
  357. if (days.length == 1) {
  358. srv_resp.__series[i][j].x = Date.UTC(days[0], 0, 1);
  359. }
  360. }
  361. }
  362. else {
  363. addFlag = 0;
  364. }
  365. } //for j
  366. if (addFlag == 1) {
  367. chart.addSeries({ name: srv_resp.__names[i],
  368. data: srv_resp.__series[i] },
  369. false);
  370. }
  371. }
  372. chart.redraw();
  373. }
  374. }
  375. },
  376. // 捕获出错信息(服务器应答超时、返回数据不是json格式等,用于调试)
  377. error: function (xmlHttpRequest, textStatus) {
  378. layer.alert(textStatus, { icon: 2, title: '提示信息' });
  379. },
  380. cache: false
  381. });
  382. }
  383. var start = {
  384. elem: "#SearchStartTime",
  385. format: "YYYY-MM-DD",
  386. min: "2010-01-01",
  387. event: "focus",
  388. choose: function (datas) {
  389. end.min = datas; //开始日选好后,重置结束日的最小日期
  390. end.start = datas; //将结束日的初始值设定为开始日
  391. $('#SearchStartTime').val(datas);
  392. }
  393. },
  394. end = {
  395. elem: "#SearchEndTime",
  396. format: "YYYY-MM-DD",
  397. min: "2010-01-01",
  398. event: "focus",
  399. choose: function (datas) {
  400. start.max = datas; //结束日选好后,重置开始日的最大日期
  401. $('#SearchEndTime').val(datas);
  402. }
  403. };
  404. $(function () {
  405. if ($("#hid_IsMarketSysAccount").val() === "0") {
  406. $("#SearchMarketID").val($('#hid_MarketID').val());
  407. $("#SearchMarketID").attr('disabled', 'disabled')
  408. } else {
  409. $("#SearchMarketID").val($('#hid_MarketID').val());
  410. }
  411. console.log($("#SearchMarketID").val())
  412. //$('#MarketIDs').val($('#hid_MarketID').val())
  413. laydate(start);
  414. laydate(end);
  415. f_CycleSelChanged();
  416. LoadChart();
  417. GetMarketSelStr();
  418. })
  419. // '查询周期'选择变化
  420. function f_CycleSelChanged() {
  421. var obj = $('#cmbQueryCycle').val();
  422. // 结束日期
  423. var dateE = new Date();
  424. document.getElementById("SearchEndTime").value = FormatDate(dateE);
  425. // 开始日期
  426. var dateB = new Date();
  427. if (obj == "1") {
  428. dateB.setDate(dateE.getDate() - 30);
  429. }
  430. else if (obj == "2") {
  431. dateB.setMonth(dateE.getMonth() - 6);
  432. }
  433. else if (obj == "3") {
  434. dateB.setMonth(dateE.getMonth() - 16);
  435. }
  436. else {
  437. dateB.setYear(dateE.getFullYear() - 6);
  438. }
  439. document.getElementById("SearchStartTime").value = FormatDate(dateB);
  440. }
  441. // 格式化Date类型的数据为yyyy-mm-dd
  442. function FormatDate(d) {
  443. // 获取年份
  444. s = d.getFullYear();
  445. // 获取月份
  446. c = d.getMonth() + 1;
  447. if (c < 10) {
  448. s += "-0" + c;
  449. }
  450. else {
  451. s += "-" + c;
  452. }
  453. // 获取日
  454. e = d.getDate();
  455. if (e < 10) {
  456. s += "-0" + e;
  457. }
  458. else {
  459. s += "-" + e;
  460. }
  461. return s;
  462. }
  463. // 打印图片
  464. function PrintBtnClk() {
  465. //$("#container").printArea();
  466. chart.print();
  467. }
  468. // 导出图片
  469. function ExportChartBtnClk() {
  470. _IsExportImage = 'Y';
  471. chart.exportChart({ type: 'image/png', width: 1200 });
  472. _IsExportImage = 'N';
  473. }
  474. </script>
  475. </body>
  476. </html>