地铁二期项目正式开始

reportRiskLevel.cshtml 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. @using YTSoft.BaseCallCenter.MVCWeb.Models;
  2. @using YTSoft.BaseCallCenter.Model;
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>风险等级报表</title>
  8. <link href="/Content/layui/css/layui.css" rel="stylesheet" />
  9. <link href="/Content/css/public.css" rel="stylesheet" />
  10. <link href="/Content/layui/css/modules/layui-icon-extend/iconfont.css" type="text/css" rel=" stylesheet" />
  11. <link href="/Content/css/font-awesome/css/font-awesome.min.css" type="text/css" rel=" stylesheet" />
  12. <script src="/Content/js/jquery-other.min.js"></script>
  13. <script src="/Content/js/Report/moment.js"></script>
  14. <script src="~/Content/js/Report/GetDate.js"></script>
  15. <script type="text/javascript" src="/Content/layui/layui.js"></script>
  16. <link href="/Content/css/callrecord/iconfont.css" rel="stylesheet" />
  17. <script src="~/Content/layui/loading.js"></script>
  18. <link href="~/Content/css/workorder/loading.css" rel="stylesheet" />
  19. <script src="/Content/dist/echarts.js" type="text/javascript"></script>
  20. <script src="/Content/dist/theme/dahua.js" type="text/javascript"></script>
  21. <style>
  22. .reportEcharts {
  23. display: flex;
  24. }
  25. </style>
  26. </head>
  27. <body class="childrenBody">
  28. <div class="layui-fluid" style="height: calc(100% - 35px);overflow:auto;">
  29. <div class=" layui-col-space15" style="height:100%">
  30. <div class="layui-card">
  31. <div class="layui-card-body">
  32. <div class="layui-row layui-col-space10 searchfilter">
  33. <div class="layui-col-md7">
  34. <div class="layui-row layui-col-space10">
  35. <div class="layui-col-xs6">
  36. <button class="layui-btn layui-btn-normal layui-btn-radius"
  37. data-type="oneWeek">最近一周</button>
  38. <button class="layui-btn layui-btn-normal layui-btn-radius"
  39. data-type="oneMonth">最近一月</button>
  40. <button class="layui-btn layui-btn-normal layui-btn-radius"
  41. data-type="oneYear">最近一年</button>
  42. </div>
  43. <div class="layui-col-xs6">
  44. <label class="layui-form-label">
  45. 时间:
  46. </label>
  47. <div class="layui-input-block">
  48. <input type="text" class="layui-input dayParty" id="test10"
  49. style="width: 300px; max-width: 300px; " placeholder=" - "
  50. value="@Model.NowDate">
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="layui-col-md5">
  56. <button class="layui-btn layui-btn-normal layui-btn-normal" data-type="reload">
  57. <i class="layui-icon">&#xe615; 查 询</i>
  58. </button>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. <div class="layui-card layui-form"
  64. style="position: absolute; top: 80px; bottom: 5px; width: calc(100% - 30px);">
  65. <div class="reportEcharts" style="width: 100%; display:flex">
  66. <div id="divimagereport1" style=" width:50%;height:500px;"></div>
  67. <div id="divimagereport2" style=" width:50%;"></div>
  68. </div>
  69. <div style="margin-top: 30px;">
  70. <div class="layui-row layui-col-space10">
  71. <div class="layui-col-xs3 layui-input-inline">
  72. <label class="layui-form-label">
  73. 等级:
  74. </label>
  75. <div class="layui-input-block">
  76. <select id="level">
  77. <option value=""></option>
  78. <option value="一级">一级</option>
  79. <option value="二级">二级</option>
  80. <option value="三级">三级</option>
  81. </select>
  82. </div>
  83. </div>
  84. <div class="layui-col-md3">
  85. <button class="layui-btn layui-btn-normal layui-btn-normal listReload">
  86. <i class="layui-icon">&#xe615; 查 询</i>
  87. </button>
  88. </div>
  89. </div>
  90. <div class="layui-row layui-col-space10">
  91. <table id="demo" lay-filter="test"></table>
  92. </div>
  93. </div>
  94. <img id="progressImgage" class="progress hide" alt=""
  95. src="@Url.Content("~/Content/images/ajax-loader.gif")" />
  96. <div id="maskOfProgressImage" class="mask hide"></div>
  97. </div>
  98. </div>
  99. </div>
  100. <script type="text/html" id="barDemo">
  101. <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="view">查看详情</a>
  102. </script>
  103. <script>
  104. layui.use('element', function () {
  105. var $ = layui.jquery
  106. , element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块
  107. $('.site-demo-active').on('click', function () {
  108. var othis = $(this), type = othis.data('type');
  109. active[type] ? active[type].call(this, othis) : '';
  110. });
  111. //Hash地址的定位
  112. var layid = location.hash.replace(/^#test=/, '');
  113. element.tabChange('test', layid);
  114. element.on('tab(test)', function (elem) {
  115. location.hash = 'test=' + $(this).attr('lay-id');
  116. });
  117. });
  118. layui.use('laydate', function () {
  119. var laydate = layui.laydate;
  120. //日期时间范围
  121. laydate.render({
  122. elem: '#test10'
  123. // , type: 'datetime'
  124. , range: true
  125. });
  126. });
  127. layui.use(['table', 'jquery'], function () {
  128. var table = layui.table;
  129. var form = layui.form,
  130. layer = parent.layer === undefined ? layui.layer : parent.layer,
  131. $ = layui.jquery;
  132. $ = layui.$, active = {
  133. //查询按钮
  134. reload: function () {
  135. searchLoad(table)
  136. },
  137. //本周
  138. oneWeek: function () {
  139. var thisDateParty = getWeekStartDate() + ' - ' + formatDate(now);
  140. $("#test10").val(thisDateParty);
  141. searchLoad(table)
  142. }
  143. //本月
  144. , oneMonth: function () {
  145. var thisDateParty = getMonthStartDate() + ' - ' + formatDate(now);
  146. $("#test10").val(thisDateParty);
  147. searchLoad(table)
  148. }
  149. //本年
  150. , oneYear: function () {
  151. var thisDateParty = getYearStartDate() + ' - ' + formatDate(now);
  152. $("#test10").val(thisDateParty);
  153. searchLoad(table)
  154. }
  155. };
  156. table.render({
  157. elem: '#demo', //指定原始表格元素选择器,也可以使用id选择器
  158. id: 'recordtable', //表格的索引
  159. url: '/ReportOther/GetTableList', //设置异步接口
  160. cols: [[
  161. { field: 'F_labelName', title: '标签', align: 'center' } //这里的templet值是模板元素的选择器
  162. , { field: 'F_level', title: '等级', align: 'center' }
  163. , { field: 'cnt', title: '数量', align: 'center' }
  164. , { field: 'percent', title: '占比', align: 'center' }
  165. , { field: 'allpercent', title: '总占比', align: 'center' }
  166. , { field: 'total', title: '合计', align: 'center' }
  167. ]],
  168. done: function (resp) {
  169. merge(resp)
  170. }
  171. });
  172. $('.searchfilter .layui-btn').on('click', function () {
  173. var type = $(this).data('type');
  174. active[type] ? active[type].call(this) : '';
  175. });
  176. $(".listReload").click(function () {
  177. table.reload('recordtable', {
  178. where: {
  179. level: $("#level").val(),
  180. stime: $("#test10").val().split(' -')[0] + " 00:00:00",
  181. etime: $("#test10").val().split('- ')[1] + " 23:59:59",
  182. NowDateTime: new Date()
  183. }
  184. });
  185. })
  186. Init();
  187. });
  188. function searchLoad(table) {
  189. Init();
  190. //执行重载
  191. table.reload('recordtable', {
  192. where: {
  193. level: $("#level").val(),
  194. stime: $("#test10").val().split(' -')[0] + " 00:00:00",
  195. etime: $("#test10").val().split('- ')[1] + " 23:59:59",
  196. NowDateTime: new Date()
  197. }
  198. });
  199. }
  200. function merge(res) {
  201. var data = res.data;
  202. if (!data) {
  203. return
  204. }
  205. var mergeIndex = 0;//定位需要添加合并属性的行数
  206. var mark = 1; //这里涉及到简单的运算,mark是计算每次需要合并的格子数
  207. var columsName = ['F_labelName'];//需要合并的列名称
  208. var columsIndex = [0, 1];//需要合并的列索引值
  209. for (var k = 0; k < columsName.length; k++) { //这里循环所有要合并的列
  210. var trArr = $(".layui-table-body>.layui-table").find("tr");//所有行
  211. for (var i = 1; i < res.data.length; i++) { //这里循环表格当前的数据
  212. var tdCurArr = trArr.eq(i).find("td").eq(columsIndex[k]);//获取当前行的当前列
  213. var tdPreArr = trArr.eq(mergeIndex).find("td").eq(columsIndex[k]);//获取相同列的第一列
  214. if (data[i][columsName[k]] === data[i - 1][columsName[k]]) { //后一行的值与前一行的值做比较,相同就需要合并
  215. mark += 1;
  216. tdPreArr.each(function () {//相同列的第一列增加rowspan属性
  217. $(this).attr("rowspan", mark);
  218. });
  219. tdCurArr.each(function () {//当前行隐藏
  220. $(this).css("display", "none");
  221. });
  222. } else {
  223. mergeIndex = i;
  224. mark = 1;//一旦前后两行的值不一样了,那么需要合并的格子数mark就需要重新计算
  225. }
  226. }
  227. mergeIndex = 0;
  228. mark = 1;
  229. }
  230. }
  231. // 路径配置
  232. require.config({
  233. paths: {
  234. echarts: '/Content/dist'
  235. }
  236. });
  237. function Init() {
  238. echartsData("/ReportOther/GetPieChart", "pie")
  239. echartsData("/ReportOther/GetLineChart", "line")
  240. }
  241. function echartsData(apiUrl, type) {
  242. $.ajax({
  243. url: apiUrl,
  244. type: "get",
  245. contentType: "application/json",
  246. dataType: "text",
  247. cache: false,
  248. data: {
  249. NowDateTime: new Date(),
  250. stime: $("#test10").val().split(' -')[0] + " 00:00:00",
  251. etime: $("#test10").val().split('- ')[1] + " 23:59:59",
  252. },
  253. success: function (result, status) {
  254. if (status) {
  255. var resultData = JSON.parse(result)
  256. if (type === "pie") {
  257. if (resultData.length > 0) {
  258. var pieData = {}
  259. var pieTitleData = []
  260. var pieSeriesData = []
  261. resultData.forEach(element => {
  262. var pieObj = {}
  263. pieObj.value = element.count
  264. pieObj.name = element.level
  265. pieTitleData.push(element.level)
  266. pieSeriesData.push(pieObj)
  267. });
  268. pieData.pieTitleData = pieTitleData
  269. pieData.pieSeriesData = pieSeriesData
  270. }
  271. setPieOption("divimagereport1", pieData)
  272. } else if (type === "line") {
  273. if (resultData.code === 0) {
  274. if (resultData.data) {
  275. setLineOption("divimagereport2", resultData.data)
  276. }
  277. } else {
  278. layui.use(['layer'], function () {
  279. layui.layer.msg(resultData.msg)
  280. })
  281. }
  282. }
  283. }
  284. }
  285. });
  286. }
  287. function setPieOption(id, pieData) {
  288. // 使用
  289. require(
  290. [
  291. 'echarts',
  292. 'echarts/chart/pie' // 使用柱状图就加载bar模块,按需加载
  293. ],
  294. function (ec) {
  295. var dahuatheme
  296. require(['echarts/theme/dahua'], function (theme) {
  297. dahuatheme = theme;
  298. });
  299. // 基于准备好的dom,初始化echarts图表
  300. var myChart = ec.init(document.getElementById(id), dahuatheme);
  301. option = {
  302. title: {
  303. show: false,
  304. text: '',
  305. subtext: '',
  306. x: 'center'
  307. },
  308. tooltip: {
  309. trigger: 'item',
  310. formatter: "{a} <br/>{b} : {c} ({d}%)"
  311. },
  312. toolbox: {
  313. show: true,
  314. feature: {
  315. dataView: {
  316. show: true,
  317. title: '数据视图',
  318. readOnly: true,
  319. lang: ['数据视图', '关闭', '刷新']
  320. },
  321. saveAsImage: {
  322. show: true,
  323. title: '保存为图片',
  324. type: 'png',
  325. lang: ['点击保存']
  326. }
  327. }
  328. },
  329. legend: {
  330. show: true,
  331. orient: 'horizontal',
  332. bottom: 20,
  333. data: pieData.pieTitleData
  334. },
  335. series: [
  336. {
  337. name: '渠道',
  338. type: 'pie',
  339. radius: '55%',
  340. center: ['50%', '55%'],
  341. data: pieData.pieSeriesData,
  342. itemStyle: {
  343. emphasis: {
  344. shadowBlur: 10,
  345. shadowOffsetX: 0,
  346. shadowColor: 'rgba(0, 0, 0, 0.5)'
  347. }
  348. }
  349. }
  350. ]
  351. }; // 为echarts对象加载数据
  352. myChart.setOption(option);
  353. }
  354. );
  355. }
  356. function setLineOption(id, resultData) {
  357. // 使用
  358. require(
  359. [
  360. 'echarts',
  361. 'echarts/chart/bar', // 使用柱状图就加载bar模块,按需加载
  362. 'echarts/chart/line'
  363. ],
  364. function (ec) {
  365. var dahuatheme
  366. require(['echarts/theme/dahua'], function (theme) {
  367. dahuatheme = theme;
  368. });
  369. // 基于准备好的dom,初始化echarts图表
  370. var myChart = ec.init(document.getElementById(id), dahuatheme);
  371. option = {
  372. tooltip: {
  373. trigger: 'axis'
  374. },
  375. legend: {
  376. data: ["一级", "二级", "三级"]
  377. },
  378. grid: {
  379. left: '3%',
  380. right: '4%',
  381. bottom: '3%',
  382. containLabel: true
  383. },
  384. toolbox: {
  385. feature: {
  386. saveAsImage: {}
  387. }
  388. },
  389. xAxis: {
  390. type: 'category',
  391. boundaryGap: false,
  392. data: resultData.datelist
  393. },
  394. yAxis: {
  395. type: 'value'
  396. },
  397. series: [
  398. {
  399. name: '一级',
  400. type: 'line',
  401. stack: 'Total',
  402. data: resultData.yiji
  403. },
  404. {
  405. name: '二级',
  406. type: 'line',
  407. stack: 'Total',
  408. data: resultData.erji
  409. },
  410. {
  411. name: '三级',
  412. type: 'line',
  413. stack: 'Total',
  414. data: resultData.sanji
  415. },
  416. ]
  417. };
  418. // 为echarts对象加载数据
  419. myChart.setOption(option);
  420. }
  421. );
  422. }
  423. </script>
  424. </body>
  425. </html>