wzkp.item.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. $(function() {
  2. $("#wzkp-type li").on("click", function(elm) {
  3. var type = elm.target.getAttribute("data-type");
  4. var yeartype = $("#wzkp-yeartype").find("li.layui-this")[0].getAttribute("data-type");
  5. getWebsiteRating(parseInt(yeartype), parseInt(type));
  6. console.log($(this).attr('data-type'))
  7. });
  8. $("#wzkp-yeartype li").on("click", function(elm) {
  9. $('#monInput').val('');
  10. if ($(this).attr('data-type') == 0) {
  11. $('#monInput').removeClass('layui-hide');
  12. } else {
  13. $('#monInput').addClass('layui-hide');
  14. }
  15. var yeartype = elm.target.getAttribute("data-type");
  16. var type = $("#wzkp-type").find("li.layui-this")[0].getAttribute("data-type");
  17. getWebsiteRating(parseInt(yeartype), parseInt(type));
  18. });
  19. });
  20. /**
  21. * 网站评分统计
  22. * @param {Object} type 0、月度;1、季度;2、半年;3、年度;
  23. * @param {Object} hasDept 1、部门;0、街镇;
  24. * @param {Object} childrenType 月度:1-12月份;季度:0、第一季度;1、1-2季度;2、1-3季度;3、1-4季度; 半年:0、上半年;1、下半年;年度:年份,例:2021
  25. * @param {Object} deptId 部门id
  26. */
  27. function getWebsiteRating(type, hasDept, childrenType, deptId, dBasic) {
  28. switch (type) {
  29. case 0:
  30. // childrenType = new Date().getMonth() + 1;
  31. break;
  32. case 1:
  33. var month = new Date().getMonth() + 1;
  34. if (month <= 3) {
  35. childrenType = 0;
  36. } else if (month <= 6) {
  37. childrenType = 1;
  38. } else if (month <= 9) {
  39. childrenType = 2;
  40. } else {
  41. childrenType = 3;
  42. }
  43. break;
  44. case 2:
  45. var month = new Date().getMonth() + 1;
  46. if (month > 6) {
  47. childrenType = 1;
  48. } else {
  49. childrenType = 0;
  50. }
  51. break;
  52. case 3:
  53. childrenType = new Date().getFullYear();
  54. break;
  55. default:
  56. break;
  57. }
  58. post('/tj/websiteRating', true, {
  59. "type": (type != null) ? type : 0,
  60. "hasDept": (hasDept != null) ? hasDept : 1,
  61. "childrenType": childrenType,
  62. "deptId": deptId,
  63. "newMon": $('#monInput').val()
  64. }, function(res) {
  65. // console.log(res)
  66. var data = res.data;
  67. if (data) {
  68. initBarChartData(data, deptId, hasDept, type, dBasic);
  69. } else {
  70. emptyChart();
  71. }
  72. }, function(err) {
  73. emptyChart();
  74. });
  75. }
  76. /**
  77. * 空数据
  78. */
  79. function emptyChart() {
  80. initBarChartData({
  81. "yData": [],
  82. "basic": [],
  83. "add": []
  84. });
  85. }
  86. /**
  87. * 初始化图表
  88. * @param {Object} data
  89. * @param {Object} deptId
  90. */
  91. function initBarChartData(data, deptId, hasDept, type, dBasic) {
  92. if (deptId) {
  93. iniatWzkpDetailTable(data.event, dBasic);
  94. drawWzkpEchart(data["detail-x"], data["detail-data"]);
  95. return;
  96. }
  97. $("#web_Assessment").removeAttr("_echarts_instance_").empty();
  98. var basic = data.basic;
  99. var add = data.add;
  100. let rankSituation=[] //用来存储部门排名情况
  101. var total = [];
  102. for (var i = 0; i < basic.length; i++) {
  103. total.push((basic[i] * 100 + add[i] * 100)/100);
  104. }
  105. var totalRanking = {};
  106. var deptNames = [];
  107. let nowY = data.yData;
  108. for (var i = nowY.length - 1; i >= 0; i--) {
  109. deptNames.push(nowY[i]);
  110. }
  111. if (data.lastMonth) {
  112. let lastBasic = data.lastMonth.basic;
  113. let lastAdd = data.lastMonth.add;
  114. let lastTotal = [];
  115. for (var i = 0; i < lastBasic.length; i++) {
  116. lastTotal.push(lastBasic[i] + lastAdd[i]);
  117. }
  118. let lastY = data.lastMonth.yData;
  119. lastY.reverse();
  120. // var deptNames = [];
  121. // let nowY = data.yData;
  122. // for (var i = nowY.length - 1; i >= 0; i--) {
  123. // deptNames.push(nowY[i]);
  124. // }
  125. for (var i = 0; i < deptNames.length; i++) {
  126. let index = getArrayIndex(lastY, deptNames[i]);
  127. console.log(deptNames[i]+",i:"+i+",index:"+index)
  128. totalRanking[deptNames[i]] = index - i;
  129. rankSituation.push(index-i)
  130. }
  131. }
  132. var copyTotal=total.slice();
  133. var totalScore=copyTotal.reverse()
  134. /**
  135. * 渲染表格
  136. */
  137. let mergeRank = '';
  138. let cssStr = 'padding-bottom: 1px;padding-top: 0px;';
  139. $('.tableContent').prev().find('th').eq(0).text('部门');
  140. if (hasDept == 0 || $('#wzkp-type').find('.layui-this').eq(0).attr('data-type') == 0) {
  141. cssStr = 'padding-bottom: 18px;padding-top: 9px;';
  142. $('.tableContent').prev().find('th').eq(0).text('街镇');
  143. }
  144. for (let i = 0, j = data.basic.length - 1; i <deptNames.length, j >= 0; i++, j--) {
  145. let mergeDept='<tr><td style="'+ cssStr +'">'+deptNames[i]+'</td><td style="'+ cssStr +'">'+totalScore[i]
  146. + '(' + (data.basic)[j] + '/' + (data.add)[j] +')</td><td style="'+ cssStr +'">'+(i+1)+'</td>'
  147. if (!rankSituation || rankSituation.length == 0) {
  148. mergeRank +=mergeDept+'<td style="'+ cssStr +'"></td></tr>'
  149. } else {
  150. if(rankSituation[i] >= 0){
  151. mergeRank +=mergeDept+'<td style="'+ cssStr +'"><img src="../page/img/rise.png" style="position: revert;margin-right:5px;"><span>'+rankSituation[i]+'</span></td></tr>'
  152. }else{
  153. mergeRank +=mergeDept+'<td style="'+ cssStr +'"><img src="../page/img/fall.png" style="position: revert;margin-right:5px;"><span>'+rankSituation[i]+'</span></td></tr>'
  154. }
  155. }
  156. }
  157. let ssType = $('#wzkp-yeartype').find('.layui-this').eq(0).attr('data-type');
  158. if (type == 1 || ssType == 1) {
  159. $('.tableContent').prev().find('th').eq(3).text('环比上季度排名');
  160. } else if (type == 2 || ssType == 2) {
  161. $('.tableContent').prev().find('th').eq(3).text('环比上半年排名');
  162. } else if (type == 3 || ssType == 3) {
  163. $('.tableContent').prev().find('th').eq(3).text('环比上年排名');
  164. } else {
  165. $('.tableContent').prev().find('th').eq(3).text('环比上月排名');
  166. }
  167. $(".tableContent").empty().append(mergeRank);
  168. // deptNames.reverse();
  169. var ppChartDom = document.getElementById('web_Assessment');
  170. var ppMyChart = echarts.init(ppChartDom);
  171. var ppOption = {
  172. tooltip: {
  173. trigger: 'axis',
  174. axisPointer: {
  175. type: 'shadow'
  176. },
  177. formatter: function (params, ticket, callback) {
  178. var html = params[0].name + '</br>';
  179. var socre = 0;
  180. for (var i = 0; i < params.length; i++) {
  181. socre += params[i].value;
  182. html += params[i].marker + ' ' + params[i].seriesName + ':' + params[i].value + '分</br>';
  183. }
  184. // html += '<span style=\"display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:#FFFFFF;\"></span> 总分:' + socre + '分';
  185. return html;
  186. }
  187. },
  188. legend: {},
  189. grid: {
  190. left: '1%',
  191. right: '4%',
  192. bottom: '3%',
  193. containLabel: true
  194. },
  195. xAxis: {
  196. type: 'value'
  197. },
  198. yAxis: {
  199. type: 'category',
  200. data: data.yData,
  201. axisLabel: {
  202. formatter: function(value, index) {
  203. return '';
  204. }
  205. }
  206. },
  207. series: [{
  208. name: '基础分',
  209. type: 'bar',
  210. stack: 'total',
  211. label: {
  212. // show: true
  213. },
  214. emphasis: {
  215. focus: 'series'
  216. },
  217. data: data.basic
  218. },
  219. {
  220. name: '加分',
  221. type: 'bar',
  222. stack: 'total',
  223. label: {
  224. // show: true
  225. },
  226. emphasis: {
  227. focus: 'series'
  228. },
  229. data: data.add,
  230. }, {
  231. name: '总分',
  232. type: 'bar',
  233. stack: '',
  234. label: {
  235. normal: {
  236. show: true,
  237. position: 'right',
  238. color: '#000',
  239. // formatter: function (params, ticket, callback) {
  240. // let index = totalRanking[params.name];
  241. // let yeartype = $("#wzkp-yeartype").find("li.layui-this")[0].getAttribute("data-type");
  242. // if (yeartype != 0) {
  243. // return params.data;
  244. // }
  245. // if (!index) {
  246. // return params.data + ' -';
  247. // }
  248. // if (index < 0) {
  249. // return params.data + ' {b|}' + Math.abs(index)
  250. // } else {
  251. // return params.data + ' {a|}' + Math.abs(index)
  252. // }
  253. // },
  254. rich: {
  255. a: {
  256. fontFamily: 'layui-icon',
  257. fontSize: 16,
  258. fontStyle: 'normal',
  259. backgroundColor: {
  260. image: '../page/img/icon-up.png'
  261. }
  262. },
  263. b: {
  264. fontFamily: 'layui-icon',
  265. fontSize: 16,
  266. fontStyle: 'normal',
  267. backgroundColor: {
  268. image: '../page/img/icon-down.png'
  269. }
  270. }
  271. }
  272. }
  273. },
  274. z: -1,
  275. barGap: '-100%',
  276. data: total
  277. }
  278. ]
  279. };
  280. ppOption && ppMyChart.setOption(ppOption);
  281. ppMyChart.on('click', function(res) {
  282. document.querySelector('#mdetail').scrollIntoView(true);
  283. $("#wzkp-title").text(data.yData[res.dataIndex]);
  284. var sortName = "第" + (data.yData.length - res.dataIndex) + "名";
  285. $("#wzkp-sort").text(sortName);
  286. var gradeName = (parseFloat(data.add[res.dataIndex]) + parseFloat(data.basic[res.dataIndex])).toFixed(
  287. 2);
  288. $("#wzkp-grade").text(gradeName + "分");
  289. //重新查询数据
  290. var yeartype = $("#wzkp-yeartype").find("li.layui-this")[0].getAttribute("data-type");
  291. var type = $("#wzkp-type").find("li.layui-this")[0].getAttribute("data-type");
  292. getWebsiteRating(parseInt(yeartype), parseInt(type), null, data.deptids[res.dataIndex], data.basic[res.dataIndex]);
  293. });
  294. // 默认数据
  295. $("#wzkp-title").text(data.yData[data.yData.length - 1]);
  296. var sortName = "第1名";
  297. $("#wzkp-sort").text(sortName);
  298. var gradeName = (parseFloat(data.add[data.yData.length - 1]) + parseFloat(data.basic[data.yData.length - 1]))
  299. .toFixed(2);
  300. $("#wzkp-grade").text(gradeName + "分");
  301. // 图表
  302. drawWzkpEchart(data["detail-x"], data["detail-data"]);
  303. // 表格数据
  304. iniatWzkpDetailTable(data.event, data.basic[data.yData.length - 1]);
  305. }
  306. /**
  307. * 初始化表格数据
  308. * @param {Object} data
  309. */
  310. function iniatWzkpDetailTable(data, dBasic) {
  311. $("#wzkp-detail-table").empty();
  312. var _html = '';
  313. if (data) {
  314. for (var i = 0; i < data.length; i++) {
  315. var temp = data[i];
  316. if (dBasic && dBasic < 80 && !temp.type) {
  317. continue;
  318. }
  319. _html += '<tr>';
  320. _html += '<td>' + (temp.target ? temp.target : temp.zdyEvent) + '</td>';
  321. _html += '<td>' + (temp.targetScore ? temp.targetScore : '-') + '</td>';
  322. _html += '<td>' + (temp.targetRequirement ? temp.targetRequirement : '-') + '</td>';
  323. _html += '<td>' + (temp.event ? temp.event : '-') + '</td>';
  324. _html += '<td>' + (temp.targetDeduct ? temp.targetDeduct : temp.zdyEvent) + '</td>';
  325. if (temp.type) {
  326. _html += '<td>-' + (temp.score ? temp.score : temp.addscore) + '</td>';
  327. // _html += '<td>' + temp.finalscore + '</td>';
  328. } else {
  329. // _html += '<td>-</td>';
  330. _html += '<td>' + temp.addscore + '</td>';
  331. }
  332. _html += '</tr>';
  333. }
  334. }
  335. $("#wzkp-detail-table").html(_html);
  336. var h = $('#wzkp-detail-table').height();
  337. var h_total = h + 150;
  338. $("#test").css("height",h_total+"px");
  339. }
  340. /*
  341. * 动态改变表格高度
  342. * */
  343. /**
  344. * 绘制图表折线图
  345. * @param {Object} data
  346. */
  347. function drawWzkpEchart(x, data) {
  348. var abChartDom = document.getElementById('webStates');
  349. var abMyChart = echarts.init(abChartDom);
  350. var abOption = {
  351. tooltip: {
  352. trigger: 'axis',
  353. formatter: function (params, ticket, callback) {
  354. var html = params[0].name + '</br>';
  355. var socre = 0;
  356. for (var i = 0; i < params.length; i++) {
  357. socre += params[i].value;
  358. html += params[i].marker + ' ' + params[i].value + '分</br>';
  359. }
  360. return html;
  361. }
  362. },
  363. title: {
  364. text: '单位:(分)'
  365. },
  366. xAxis: {
  367. type: 'category',
  368. data: x
  369. },
  370. yAxis: {
  371. type: 'value'
  372. },
  373. series: [{
  374. data: data,
  375. type: 'line',
  376. }]
  377. };
  378. abOption && abMyChart.setOption(abOption);
  379. }
  380. function getArrayIndex(arr, obj) {
  381. var i = arr.length;
  382. while (i--) {
  383. if (arr[i] === obj) {
  384. return i;
  385. }
  386. }
  387. return -1;
  388. }