controlDetail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. <template>
  2. <div class="main" v-cloak>
  3. <Header/>
  4. <div class="main_t">
  5. <div class="main_t_t">
  6. <i class="main_t_t_l">当前位置:首页 &gt;</i>
  7. <i>分级管控</i>
  8. </div>
  9. <div class="main_t_b" id="illegal_chart"></div>
  10. </div>
  11. <div class="main_b">
  12. <!--查询条件-->
  13. <el-form :model="editForm" ref="queryParams" class="form-box" :inline="true" style="margin:20px;">
  14. <el-form-item label="实验室" prop="dangerId" label-width="98px">
  15. <el-select v-model="editForm.subId" popper-class="select-big-data" placeholder="请选择实验室">
  16. <el-option
  17. v-for="item in labList"
  18. :key="item.id"
  19. :label="item.name"
  20. :value="item.id">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="日期" prop="dateRange" label-width="68px">
  25. <el-date-picker
  26. popper-class="select-big-data-time"
  27. v-model="dateRange"
  28. size="small"
  29. style="width: 240px"
  30. value-format="yyyy-MM-dd"
  31. type="daterange"
  32. range-separator="-"
  33. start-placeholder="开始日期"
  34. end-placeholder="结束日期"
  35. ></el-date-picker>
  36. </el-form-item>
  37. <el-form-item label-width="0">
  38. <el-button type="primary" @click.native.prevent="onSearch" native-type="submit">查询</el-button>
  39. <el-button @click="resetForm('searchForm')">重置</el-button>
  40. </el-form-item>
  41. </el-form>
  42. <!--列表-->
  43. <el-table :data="tableData" style="width: 100%;" height="420" :row-class-name="tableRowClassName">
  44. <el-table-column align="center" header-align='center' type="index" :index="indexMethod" label="序号" width="60"></el-table-column>
  45. <el-table-column align="center" header-align='center' prop="subName" label="实验室名称"></el-table-column>
  46. <el-table-column align="center" header-align='center' prop="typeName" label="安全分类"></el-table-column>
  47. <el-table-column align="center" header-align='center' prop="levelName" label="安全分级"></el-table-column>
  48. <el-table-column align="center" header-align='center' prop="planNum" label="计划执行数"></el-table-column>
  49. <el-table-column align="center" header-align='center' prop="finishedNum" label="实际执行数"></el-table-column>
  50. <el-table-column align="center" header-align='center' prop="rateNum" label="执行率" width="420">
  51. <template #default="{row}">
  52. <el-progress :percentage="Number(row.rateNum)" :stroke-width="20"></el-progress>
  53. </template>
  54. </el-table-column>
  55. </el-table>
  56. <el-pagination
  57. style="margin-top: 14px"
  58. background
  59. @current-change="handleCurrentChange"
  60. :page-sizes="[10, 20, 30, 40]"
  61. :current-page.sync="editForm.pageNum"
  62. :page-size="editForm.pageSize"
  63. layout="total,prev, pager, next"
  64. :total="totalNum">
  65. </el-pagination>
  66. </div>
  67. </div>
  68. </template>
  69. <script>
  70. import {chartDetails, departmentsList, getSubjectDict, workCharts} from "../api/http"
  71. import $ from 'jquery'
  72. import * as echarts from 'echarts'
  73. import Header from '@/components/header.vue'
  74. export default {
  75. components: {
  76. Header
  77. },
  78. data() {
  79. return {
  80. editForm:{
  81. deptLevel:'',//这个是登陆后,刘波给你的院校的类型
  82. groupDeptId:'',//院系id
  83. subId:'',//实验室类型
  84. beginTimeStr:'',//开始时间
  85. endTimeStr:'',//结束时间
  86. pageNum:1,
  87. pageSize:10
  88. },
  89. subjectOptions:[],//院系
  90. labList:[],//实验室
  91. dateRange:[],//时间
  92. totalNum:0,
  93. tableData:[],
  94. }
  95. },
  96. methods: {
  97. back(){
  98. this.$router.push('/')
  99. },
  100. tableRowClassName({row, rowIndex}) {
  101. if (rowIndex%2 === 0) {
  102. return 'success-row';
  103. } else{
  104. return 'warning-row';
  105. }
  106. return '';
  107. },
  108. indexMethod(index) {
  109. return (this.editForm.pageNum - 1) * this.editForm.pageSize + index + 1;
  110. },
  111. //请求列表
  112. getAjaxList:function (){
  113. let _this=this;
  114. let obj={
  115. 'subId':this.editForm.subId,
  116. 'type':localStorage.getItem('deptLevel'),
  117. 'pageNum':this.editForm.pageNum,
  118. 'pageSize':this.editForm.pageSize,
  119. 'startTime':this.editForm.beginTimeStr,
  120. 'endTime':this.editForm.endTimeStr,
  121. }
  122. //列表
  123. chartDetails(obj).then((res) =>{
  124. if(res.code==200){
  125. let data = res.rows;
  126. if(data && data.length>0){
  127. _this.tableData = data;
  128. _this.totalNum = parseInt(res.total);
  129. }else{
  130. _this.tableData = [];
  131. _this.totalNum = 0;
  132. }
  133. console.log(_this.tableData)
  134. }
  135. })
  136. },
  137. getAjaxData: function () {
  138. let _this=this;
  139. let obj={
  140. 'subId':this.editForm.subId,
  141. 'type':localStorage.getItem('deptLevel'),
  142. 'pageNum':this.editForm.pageNum,
  143. 'pageSize':this.editForm.pageSize,
  144. 'startTime':this.editForm.beginTimeStr,
  145. 'endTime':this.editForm.endTimeStr,
  146. }
  147. //图表
  148. workCharts().then((res) =>{
  149. if(res.code==200){
  150. let dataX= ['product', '计划执行', '实际执行',]
  151. let dataValue=[];
  152. let data=res.data;
  153. dataValue=data
  154. dataValue.unshift(dataX)
  155. console.log(dataValue)
  156. _this.illegalDetailFun(dataValue)
  157. }
  158. })
  159. //查询院系
  160. departmentsList().then((res) =>{
  161. if(res.code==200){
  162. let data=res.data;
  163. _this.subjectOptions=data
  164. }
  165. })
  166. //查询实验室
  167. getSubjectDict().then((res) =>{
  168. if(res.code==200){
  169. let data=res.data;
  170. _this.labList=data
  171. }
  172. })
  173. },
  174. /*查询*/
  175. onSearch() {
  176. if(this.dateRange.length>0){
  177. this.editForm.beginTimeStr = this.dateRange[0];
  178. this.editForm.endTimeStr = this.dateRange[1];
  179. }
  180. this.editForm.pageNum =1;
  181. this.getAjaxList();
  182. this.getAjaxData();
  183. },
  184. /*重置*/
  185. resetForm(formName) {
  186. this.editForm.subId = "";
  187. this.editForm.groupDeptId = "";
  188. this.editForm.beginTimeStr = "";
  189. this.editForm.endTimeStr = "";
  190. this.dateRange = [];
  191. this.onSearch();
  192. },
  193. handleCurrentChange(val) {
  194. this.editForm.pageNum = val;
  195. this.getAjaxList();
  196. },
  197. /*安全隐患详情图表*/
  198. illegalDetailFun:function(dataValue) {
  199. let illegalOption = {
  200. color: ['#E47732','#1D67EE',],
  201. legend: {
  202. type: 'scroll',
  203. itemGap:20,
  204. itemWidth :14,
  205. textStyle:{
  206. color:'#fff'
  207. },
  208. right: '5%',
  209. top: '4%',
  210. },
  211. tooltip: {},
  212. grid: {
  213. left: '3%',
  214. right: '4%',
  215. bottom: '3%',
  216. containLabel: true
  217. },
  218. dataset: {
  219. source:dataValue
  220. /* source: [
  221. ['product', '计划执行', '实际执行',],
  222. ['星期一 - 1月1日', 43.3, 85.8, ],
  223. ['星期二 - 1月2日', 83.1, 73.4,],
  224. ['星期三 - 1月4日', 86.4, 65.2, ],
  225. ['星期四 - 1月4日', 72.4, 53.9, ]
  226. ]*/
  227. },
  228. xAxis: {
  229. type: 'category',
  230. axisLabel: {
  231. textStyle: {//改变X轴字体颜色
  232. color: '#fff',
  233. }
  234. },
  235. axisTick:{//去掉X轴刻度
  236. show:false,
  237. },
  238. axisLine:{
  239. lineStyle:{
  240. color:'#0D1F43',//改变X轴颜色
  241. }
  242. },
  243. },
  244. yAxis: {
  245. axisLabel: {
  246. textStyle: {//改变X轴字体颜色
  247. color: '#fff',
  248. }
  249. },
  250. splitLine: { // 分隔线
  251. show: false, // 默认显示,属性show控制显示与否
  252. lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式
  253. color: ['#fff'],
  254. width: 1,
  255. type: 'solid',
  256. opacity:0.15
  257. },
  258. },
  259. axisTick:{//去掉X轴刻度
  260. show:false,
  261. },
  262. axisLine:{
  263. show:true,
  264. lineStyle:{
  265. color:'#0D1F43',//改变X轴颜色
  266. }
  267. },
  268. },
  269. // Declare several bar series, each will be mapped
  270. // to a column of dataset.source by default.
  271. series: [
  272. { type: 'bar',barWidth: '10%', itemStyle: { normal: { barBorderRadius: 8}},"label": {
  273. "normal": {
  274. "show": true,
  275. "position": "top",
  276. fontSize: 14,
  277. fontWeight: '500',
  278. color: '#fff',
  279. padding:[2,2,2,0],
  280. }
  281. },},
  282. { type: 'bar' ,barWidth: '10%', itemStyle: { normal: { barBorderRadius: 8}},"label": {
  283. "normal": {
  284. "show": true,
  285. "position": "top",
  286. fontSize: 14,
  287. fontWeight: '500',
  288. color: '#fff',
  289. padding:[2,2,2,0],
  290. }
  291. },},
  292. ]
  293. };
  294. var illegal_chart = echarts.init(document.getElementById('illegal_chart'));
  295. illegal_chart.setOption(illegalOption);
  296. }
  297. },
  298. mounted() {
  299. this.getAjaxData()
  300. this.getAjaxList()
  301. },
  302. }
  303. </script>
  304. <!-- Add "scoped" attribute to limit CSS to this component only -->
  305. <style lang="scss" scoped>
  306. @function rw($px){
  307. @return $px*100/1920 *1vw;
  308. }
  309. @function rh($px){
  310. @return $px*100/1080 *1vh;
  311. }
  312. * {
  313. padding: 0;
  314. margin: 0;
  315. box-sizing: border-box;
  316. }
  317. .main {
  318. width: rw(1920);
  319. height: rh(1080);
  320. /* background: url("../img/index_bg.png") no-repeat;
  321. background-size: 100% 100%;*/
  322. position: relative;
  323. left: 0;
  324. top: 0;
  325. z-index: 50;
  326. background: #062338;
  327. .header {
  328. width: 100%;
  329. position: absolute;
  330. left: rw(0);
  331. top: rh(0);
  332. z-index: 100;
  333. display: flex;
  334. justify-content: flex-start;
  335. .header_l {
  336. width: rw(182);
  337. height: rh(44);
  338. margin: rh(10) 0 0 rw(40);
  339. }
  340. .header_c {
  341. width: rw(1180);
  342. height: rh(152);
  343. margin-left: rw(136);
  344. background: url("~@/assets/image/index_icon2.png") no-repeat;
  345. background-size: 100% 100%;
  346. font-size: rh(30);
  347. font-family: Microsoft YaHei;
  348. font-weight: bold;
  349. color: #FFFFFF;
  350. line-height: rh(30);
  351. text-align: center;
  352. padding-top: rh(26);
  353. }
  354. .header_r {
  355. margin-left: rw(264);
  356. width: rw(82);
  357. height: rh(32);
  358. margin-top: rh(18);
  359. }
  360. }
  361. .main_t{
  362. background: rgba(9, 55, 81, 0.6);
  363. width: rw(1852);
  364. height: rh(352);
  365. position: absolute;
  366. left: rw(34);
  367. top: rh(86);
  368. z-index: 200;
  369. .main_t_t{
  370. margin: rh(20) 0 0 rw(18);
  371. >i{
  372. font-size: rh(16);
  373. font-family: Microsoft YaHei;
  374. font-weight: bold;
  375. color: #FFFFFF;
  376. line-height: rh(16);
  377. }
  378. >i:nth-of-type(1){
  379. }
  380. >i:nth-of-type(2){
  381. color: #1ED0F8;
  382. }
  383. }
  384. .main_t_b{
  385. width: rw(1852);
  386. height: rh(302);
  387. }
  388. }
  389. .main_b{
  390. background: rgba(9, 55, 81, 0.6);
  391. padding: 0 rw(32);
  392. width: rw(1852);
  393. height: rh(602);
  394. position: absolute;
  395. left: rw(34);
  396. top: rh(468);
  397. z-index: 200;
  398. }
  399. }
  400. </style>
  401. <style lang="scss">
  402. li{list-style:none}
  403. i,em,b{font-style:normal;font-weight:100;}
  404. body{margin: 0}
  405. </style>