From de1de0e73bd260cb1babe7b15c9e943a381009de Mon Sep 17 00:00:00 2001
From: web <candymxq888@outlook.com>
Date: 星期五, 21 三月 2025 17:22:26 +0800
Subject: [PATCH] feat:增加温度系统界面

---
 src/assets/styles/index.scss                   |    9 
 src/views/screen/flow/report/index.vue         |   37 
 src/assets/styles/element-ui.scss              |    4 
 src/components/Table/index.vue                 |   26 
 src/layout/components/TagsView/index.vue       |    2 
 src/views/screen/temperature/statics/index.vue |  273 +++++++++++
 /dev/null                                      |    1 
 src/views/system/user/index.vue                |    2 
 index.html                                     |    4 
 src/views/screen/flow/warning/index.vue        |  155 +++++-
 src/api/screen/warning/index.js                |   27 +
 src/components/TopNav/index.vue                |    2 
 src/layout/components/AppMain.vue              |    2 
 src/views/screen/temperature/monitor/index.vue |  360 ++++++++++++++
 src/views/screen/temperature/shebei/index.vue  |  350 ++++++++++++++
 src/utils/index.js                             |   12 
 src/views/screen/temperature/report/index.vue  |  112 ++++
 src/views/screen/temperature/graphic/index.vue |   62 ++
 18 files changed, 1,360 insertions(+), 80 deletions(-)

diff --git a/index.html b/index.html
index e6a3153..8fb942e 100644
--- a/index.html
+++ b/index.html
@@ -17,10 +17,6 @@
       height: 100%;
       margin: 0;
       padding: 0;
-        //控制初始字体大小
-        @media(min-width: 1921px) and (max-width: 3840px) {
-            font-size: 32px;
-        }
     }
 
     .chromeframe {
diff --git a/src/api/screen/warning/index.js b/src/api/screen/warning/index.js
new file mode 100644
index 0000000..ecc37d6
--- /dev/null
+++ b/src/api/screen/warning/index.js
@@ -0,0 +1,27 @@
+import {publicRequest} from '@/utils/request'
+
+
+/**
+ * 报警历史数据
+ * @param data 搜索分页数据
+ */
+export const warnHistory = (data) => {
+    return publicRequest({
+        url: '/alarmHistory/search',
+        method: 'post',
+        data
+    })
+}
+
+/**
+ * 报警历史数据导出
+ * @param data 搜索分页数据
+ */
+export const exportWarnHistory = (params) => {
+    return publicRequest({
+        url: '/alarmHistory/exportExcel',
+        method: 'get',
+        params,
+        responseType: 'blob'
+    })
+}
\ No newline at end of file
diff --git a/src/assets/styles/element-ui.css b/src/assets/styles/element-ui.css
deleted file mode 100644
index 85596a9..0000000
--- a/src/assets/styles/element-ui.css
+++ /dev/null
@@ -1,82 +0,0 @@
-.el-dialog {
-  min-width: 45vw;
-}
-
-.el-dialog .el-form {
-  margin-top: 20px;
-}
-
-.el-breadcrumb__inner,
-.el-breadcrumb__inner a {
-  font-weight: 400 !important;
-}
-
-.el-upload input[type="file"] {
-  display: none !important;
-}
-
-.el-upload__input {
-  display: none;
-}
-
-.cell .el-tag {
-  margin-right: 0px;
-}
-
-.small-padding .cell {
-  padding-left: 5px;
-  padding-right: 5px;
-}
-
-.fixed-width .el-button--mini {
-  padding: 7px 10px;
-  width: 60px;
-}
-
-.status-col .cell {
-  padding: 0 10px;
-  text-align: center;
-}
-
-.status-col .cell .el-tag {
-  margin-right: 0px;
-}
-
-.el-dialog {
-  border-radius: 10px;
-  background-color: #f4f7fa;
-  min-height: 40vh;
-}
-
-.upload-container .el-upload {
-  width: 100%;
-}
-
-.upload-container .el-upload .el-upload-dragger {
-  width: 100%;
-  height: 200px;
-}
-
-.el-dropdown-menu a {
-  display: block;
-}
-
-.el-range-editor.el-input__inner {
-  display: inline-flex !important;
-}
-
-.el-range-separator {
-  box-sizing: content-box;
-}
-
-.el-menu--collapse
-> div
-> .el-submenu
-> .el-submenu__title
-.el-submenu__icon-arrow {
-  display: none;
-}
-
-.el-dropdown .el-dropdown-link {
-  color: var(--el-color-primary) !important;
-}
diff --git a/src/assets/styles/element-ui.min.css b/src/assets/styles/element-ui.min.css
deleted file mode 100644
index f9dabe8..0000000
--- a/src/assets/styles/element-ui.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.el-dialog{min-width:45vw}.el-dialog .el-form{margin-top:20px}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400 !important}.el-upload input[type="file"]{display:none !important}.el-upload__input{display:none}.cell .el-tag{margin-right:0px}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0px}.el-dialog{border-radius:10px;background-color:#f4f7fa;min-height:40vh}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}.el-range-editor.el-input__inner{display:inline-flex !important}.el-range-separator{box-sizing:content-box}.el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-dropdown .el-dropdown-link{color:var(--el-color-primary) !important}
diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss
index ba77f4e..996c04a 100644
--- a/src/assets/styles/element-ui.scss
+++ b/src/assets/styles/element-ui.scss
@@ -1,9 +1,6 @@
 // cover some element-ui styles
 
 
-.el-dialog{
-  min-width:45vw;
-}
 .el-dialog__body{
   overflow-y: auto;
   max-height: 70vh;
@@ -58,7 +55,6 @@
 .el-dialog {
   border-radius: 10px;
   background-color: rgb(244, 247, 250);
-  min-height:40vh;
 }
 
 // refine element ui upload
diff --git a/src/assets/styles/index.css b/src/assets/styles/index.css
deleted file mode 100644
index 3580123..0000000
--- a/src/assets/styles/index.css
+++ /dev/null
@@ -1,984 +0,0 @@
-@charset "UTF-8";
-/**
-$base-menu-color:hsla(0,0%,100%,.65);
-$base-menu-color-active:#fff;
-$base-menu-background:#001529;
-$base-logo-title-color: #ffffff;
-
-$base-menu-light-color:rgba(0,0,0,.70);
-$base-menu-light-background:#ffffff;
-$base-logo-light-title-color: #001529;
-
-$base-sub-menu-background:#000c17;
-$base-sub-menu-hover:#001528;
-*/
-:export {
-  menuColor: #bfcbd9;
-  menuLightColor: rgba(0, 0, 0, 0.7);
-  menuColorActive: #f4f4f5;
-  menuBackground: #2C3443;
-  menuLightBackground: #ffffff;
-  subMenuBackground: #1f2d3d;
-  subMenuHover: #001528;
-  sideBarWidth: 200px;
-  logoTitleColor: #ffffff;
-  logoLightTitleColor: #001529;
-  primaryColor: #409EFF;
-  successColor: #67C23A;
-  dangerColor: #F56C6C;
-  infoColor: #909399;
-  warningColor: #E6A23C;
-}
-
-/* fade */
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.28s;
-}
-
-.fade-enter,
-.fade-leave-active {
-  opacity: 0;
-}
-
-/* fade-transform */
-.fade-transform--move,
-.fade-transform-leave-active,
-.fade-transform-enter-active {
-  transition: all .5s;
-}
-
-.fade-transform-enter {
-  opacity: 0;
-  transform: translateX(-30px);
-}
-
-.fade-transform-leave-to {
-  opacity: 0;
-  transform: translateX(30px);
-}
-
-/* breadcrumb transition */
-.breadcrumb-enter-active,
-.breadcrumb-leave-active {
-  transition: all .5s;
-}
-
-.breadcrumb-enter,
-.breadcrumb-leave-active {
-  opacity: 0;
-  transform: translateX(20px);
-}
-
-.breadcrumb-move {
-  transition: all .5s;
-}
-
-.breadcrumb-leave-active {
-  position: absolute;
-}
-
-.el-dialog {
-  min-width: 45vw;
-}
-
-.el-dialog .el-form {
-  margin-top: 20px;
-}
-
-.el-breadcrumb__inner,
-.el-breadcrumb__inner a {
-  font-weight: 400 !important;
-}
-
-.el-upload input[type="file"] {
-  display: none !important;
-}
-
-.el-upload__input {
-  display: none;
-}
-
-.cell .el-tag {
-  margin-right: 0px;
-}
-
-.small-padding .cell {
-  padding-left: 5px;
-  padding-right: 5px;
-}
-
-.fixed-width .el-button--mini {
-  padding: 7px 10px;
-  width: 60px;
-}
-
-.status-col .cell {
-  padding: 0 10px;
-  text-align: center;
-}
-
-.status-col .cell .el-tag {
-  margin-right: 0px;
-}
-
-.el-dialog {
-  border-radius: 10px;
-  background-color: #f4f7fa;
-  min-height: 40vh;
-}
-
-.upload-container .el-upload {
-  width: 100%;
-}
-
-.upload-container .el-upload .el-upload-dragger {
-  width: 100%;
-  height: 200px;
-}
-
-.el-dropdown-menu a {
-  display: block;
-}
-
-.el-range-editor.el-input__inner {
-  display: inline-flex !important;
-}
-
-.el-range-separator {
-  box-sizing: content-box;
-}
-
-.el-menu--collapse
-> div
-> .el-submenu
-> .el-submenu__title
-.el-submenu__icon-arrow {
-  display: none;
-}
-
-.el-dropdown .el-dropdown-link {
-  color: var(--el-color-primary) !important;
-}
-
-#app .main-container {
-  height: 100%;
-  transition: margin-left .28s;
-  margin-left: 200px;
-  position: relative;
-}
-
-#app .sidebarHide {
-  margin-left: 0 !important;
-}
-
-#app .sidebar-container {
-  -webkit-transition: width .28s;
-  transition: width 0.28s;
-  width: 200px !important;
-  background-color: #2C3443;
-  height: 100%;
-  position: fixed;
-  font-size: 0px;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1001;
-  overflow: hidden;
-  -webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
-  box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
-}
-
-#app .sidebar-container .horizontal-collapse-transition {
-  transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
-}
-
-#app .sidebar-container .scrollbar-wrapper {
-  overflow-x: hidden !important;
-}
-
-#app .sidebar-container .el-scrollbar__bar.is-vertical {
-  right: 0px;
-}
-
-#app .sidebar-container .el-scrollbar {
-  height: 100%;
-}
-
-#app .sidebar-container.has-logo .el-scrollbar {
-  height: calc(100% - 50px);
-}
-
-#app .sidebar-container .is-horizontal {
-  display: none;
-}
-
-#app .sidebar-container a {
-  display: inline-block;
-  width: 100%;
-  overflow: hidden;
-}
-
-#app .sidebar-container .svg-icon {
-  margin-right: 16px;
-}
-
-#app .sidebar-container .el-menu {
-  border: none;
-  height: 100%;
-  width: 100% !important;
-}
-
-#app .sidebar-container .el-menu-item, #app .sidebar-container .menu-title {
-  overflow: hidden !important;
-  text-overflow: ellipsis !important;
-  white-space: nowrap !important;
-}
-
-#app .sidebar-container .el-menu-item .el-menu-tooltip__trigger {
-  display: inline-block !important;
-}
-
-#app .sidebar-container .sub-menu-title-noDropdown:hover,
-#app .sidebar-container .el-sub-menu__title:hover {
-  background-color: rgba(0, 0, 0, 0.06) !important;
-}
-
-#app .sidebar-container .theme-dark .is-active > .el-sub-menu__title {
-  color: #f4f4f5 !important;
-}
-
-#app .sidebar-container .nest-menu .el-sub-menu > .el-sub-menu__title,
-#app .sidebar-container .el-sub-menu .el-menu-item {
-  min-width: 200px !important;
-}
-
-#app .sidebar-container .nest-menu .el-sub-menu > .el-sub-menu__title:hover,
-#app .sidebar-container .el-sub-menu .el-menu-item:hover {
-  background-color: rgba(0, 0, 0, 0.06) !important;
-}
-
-#app .sidebar-container .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title,
-#app .sidebar-container .theme-dark .el-sub-menu .el-menu-item {
-  background-color: #1f2d3d !important;
-}
-
-#app .sidebar-container .theme-dark .nest-menu .el-sub-menu > .el-sub-menu__title:hover,
-#app .sidebar-container .theme-dark .el-sub-menu .el-menu-item:hover {
-  background-color: #001528 !important;
-}
-
-#app .hideSidebar .sidebar-container {
-  width: 54px !important;
-}
-
-#app .hideSidebar .main-container {
-  margin-left: 54px;
-}
-
-#app .hideSidebar .sub-menu-title-noDropdown {
-  padding: 0 !important;
-  position: relative;
-}
-
-#app .hideSidebar .sub-menu-title-noDropdown .el-tooltip {
-  padding: 0 !important;
-}
-
-#app .hideSidebar .sub-menu-title-noDropdown .el-tooltip .svg-icon {
-  margin-left: 20px;
-}
-
-#app .hideSidebar .el-sub-menu {
-  overflow: hidden;
-}
-
-#app .hideSidebar .el-sub-menu > .el-sub-menu__title {
-  padding: 0 !important;
-}
-
-#app .hideSidebar .el-sub-menu > .el-sub-menu__title .svg-icon {
-  margin-left: 20px;
-}
-
-#app .hideSidebar .el-menu--collapse .el-sub-menu > .el-sub-menu__title > span {
-  height: 0;
-  width: 0;
-  overflow: hidden;
-  visibility: hidden;
-  display: inline-block;
-}
-
-#app .hideSidebar .el-menu--collapse .el-sub-menu > .el-sub-menu__title > i {
-  height: 0;
-  width: 0;
-  overflow: hidden;
-  visibility: hidden;
-  display: inline-block;
-}
-
-#app .el-menu--collapse .el-menu .el-sub-menu {
-  min-width: 200px !important;
-}
-
-#app .mobile .main-container {
-  margin-left: 0px;
-}
-
-#app .mobile .sidebar-container {
-  transition: transform .28s;
-  width: 200px !important;
-}
-
-#app .mobile.hideSidebar .sidebar-container {
-  pointer-events: none;
-  transition-duration: 0.3s;
-  transform: translate3d(-200px, 0, 0);
-}
-
-#app .withoutAnimation .main-container,
-#app .withoutAnimation .sidebar-container {
-  transition: none;
-}
-
-.el-menu--vertical > .el-menu .svg-icon {
-  margin-right: 16px;
-}
-
-.el-menu--vertical .nest-menu .el-sub-menu > .el-sub-menu__title:hover,
-.el-menu--vertical .el-menu-item:hover {
-  background-color: rgba(0, 0, 0, 0.06) !important;
-}
-
-.el-menu--vertical > .el-menu--popup {
-  max-height: 100vh;
-  overflow-y: auto;
-}
-
-.el-menu--vertical > .el-menu--popup::-webkit-scrollbar-track-piece {
-  background: #d3dce6;
-}
-
-.el-menu--vertical > .el-menu--popup::-webkit-scrollbar {
-  width: 6px;
-}
-
-.el-menu--vertical > .el-menu--popup::-webkit-scrollbar-thumb {
-  background: #99a9bf;
-  border-radius: 20px;
-}
-
-/**
-$base-menu-color:hsla(0,0%,100%,.65);
-$base-menu-color-active:#fff;
-$base-menu-background:#001529;
-$base-logo-title-color: #ffffff;
-
-$base-menu-light-color:rgba(0,0,0,.70);
-$base-menu-light-background:#ffffff;
-$base-logo-light-title-color: #001529;
-
-$base-sub-menu-background:#000c17;
-$base-sub-menu-hover:#001528;
-*/
-:export {
-  menuColor: #bfcbd9;
-  menuLightColor: rgba(0, 0, 0, 0.7);
-  menuColorActive: #f4f4f5;
-  menuBackground: #2C3443;
-  menuLightBackground: #ffffff;
-  subMenuBackground: #1f2d3d;
-  subMenuHover: #001528;
-  sideBarWidth: 200px;
-  logoTitleColor: #ffffff;
-  logoLightTitleColor: #001529;
-  primaryColor: #409EFF;
-  successColor: #67C23A;
-  dangerColor: #F56C6C;
-  infoColor: #909399;
-  warningColor: #E6A23C;
-}
-
-.blue-btn {
-  background: #2C3443;
-}
-
-.blue-btn:hover {
-  color: #2C3443;
-}
-
-.blue-btn:hover:before, .blue-btn:hover:after {
-  background: #2C3443;
-}
-
-.light-blue-btn {
-  background: #3A71A8;
-}
-
-.light-blue-btn:hover {
-  color: #3A71A8;
-}
-
-.light-blue-btn:hover:before, .light-blue-btn:hover:after {
-  background: #3A71A8;
-}
-
-.red-btn {
-  background: #C03639;
-}
-
-.red-btn:hover {
-  color: #C03639;
-}
-
-.red-btn:hover:before, .red-btn:hover:after {
-  background: #C03639;
-}
-
-.pink-btn {
-  background: #E65D6E;
-}
-
-.pink-btn:hover {
-  color: #E65D6E;
-}
-
-.pink-btn:hover:before, .pink-btn:hover:after {
-  background: #E65D6E;
-}
-
-.green-btn {
-  background: #30B08F;
-}
-
-.green-btn:hover {
-  color: #30B08F;
-}
-
-.green-btn:hover:before, .green-btn:hover:after {
-  background: #30B08F;
-}
-
-.tiffany-btn {
-  background: #4AB7BD;
-}
-
-.tiffany-btn:hover {
-  color: #4AB7BD;
-}
-
-.tiffany-btn:hover:before, .tiffany-btn:hover:after {
-  background: #4AB7BD;
-}
-
-.yellow-btn {
-  background: #FEC171;
-}
-
-.yellow-btn:hover {
-  color: #FEC171;
-}
-
-.yellow-btn:hover:before, .yellow-btn:hover:after {
-  background: #FEC171;
-}
-
-.pan-btn {
-  font-size: 14px;
-  color: #fff;
-  padding: 14px 36px;
-  border-radius: 8px;
-  border: none;
-  outline: none;
-  transition: 600ms ease all;
-  position: relative;
-  display: inline-block;
-}
-
-.pan-btn:hover {
-  background: #fff;
-}
-
-.pan-btn:hover:before, .pan-btn:hover:after {
-  width: 100%;
-  transition: 600ms ease all;
-}
-
-.pan-btn:before, .pan-btn:after {
-  content: '';
-  position: absolute;
-  top: 0;
-  right: 0;
-  height: 2px;
-  width: 0;
-  transition: 400ms ease all;
-}
-
-.pan-btn::after {
-  right: inherit;
-  top: inherit;
-  left: 0;
-  bottom: 0;
-}
-
-.custom-button {
-  display: inline-block;
-  line-height: 1;
-  white-space: nowrap;
-  cursor: pointer;
-  background: #fff;
-  color: #fff;
-  -webkit-appearance: none;
-  text-align: center;
-  box-sizing: border-box;
-  outline: 0;
-  margin: 0;
-  padding: 10px 15px;
-  font-size: 14px;
-  border-radius: 4px;
-}
-
-/**
- * 通用css样式布局处理
- * Copyright (c) 2019 ruoyi
- */
-/** 基础通用 **/
-.pt5 {
-  padding-top: 5px;
-}
-
-.pr5 {
-  padding-right: 5px;
-}
-
-.pb5 {
-  padding-bottom: 5px;
-}
-
-.mt5 {
-  margin-top: 5px;
-}
-
-.mr5 {
-  margin-right: 5px;
-}
-
-.mb5 {
-  margin-bottom: 5px;
-}
-
-.mb8 {
-  margin-bottom: 8px;
-}
-
-.ml5 {
-  margin-left: 5px;
-}
-
-.mt10 {
-  margin-top: 10px;
-}
-
-.mr10 {
-  margin-right: 10px;
-}
-
-.mb10 {
-  margin-bottom: 10px;
-}
-
-.ml10 {
-  margin-left: 10px;
-}
-
-.mt20 {
-  margin-top: 20px;
-}
-
-.mr20 {
-  margin-right: 20px;
-}
-
-.mb20 {
-  margin-bottom: 20px;
-}
-
-.ml20 {
-  margin-left: 20px;
-}
-
-.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
-  font-family: inherit;
-  font-weight: 500;
-  line-height: 1.1;
-  color: inherit;
-}
-
-.el-form .el-form-item__label {
-  font-weight: 700;
-}
-
-.el-dialog.scrollbar .el-dialog__body {
-  overflow: auto;
-  overflow-x: hidden;
-  max-height: 70vh;
-  padding: 10px 20px 0;
-}
-
-.el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
-  word-break: break-word;
-  background-color: #f8f8f9 !important;
-  color: #515a6e;
-  height: 40px !important;
-  font-size: 13px;
-}
-
-.el-table .el-table__body-wrapper .el-button [class*="el-icon-"] + span {
-  margin-left: 1px;
-}
-
-/** 表单布局 **/
-.form-header {
-  font-size: 15px;
-  color: #6379bb;
-  border-bottom: 1px solid #ddd;
-  margin: 8px 10px 25px 10px;
-  padding-bottom: 5px;
-}
-
-/* tree border */
-.tree-border {
-  margin-top: 5px;
-  border: 1px solid #e5e6e7;
-  background: #FFFFFF none;
-  border-radius: 4px;
-  width: 100%;
-}
-
-.el-table .fixed-width .el-button--small {
-  padding-left: 0;
-  padding-right: 0;
-  width: inherit;
-}
-
-/** 表格更多操作下拉样式 */
-.el-table .el-dropdown-link {
-  cursor: pointer;
-  color: #409EFF;
-  margin-left: 10px;
-}
-
-.el-table .el-dropdown, .el-icon-arrow-down {
-  font-size: 12px;
-}
-
-.el-tree-node__content > .el-checkbox {
-  margin-right: 8px;
-}
-
-.list-group-striped > .list-group-item {
-  border-left: 0;
-  border-right: 0;
-  border-radius: 0;
-  padding-left: 0;
-  padding-right: 0;
-}
-
-.list-group {
-  padding-left: 0px;
-  list-style: none;
-}
-
-.list-group-item {
-  border-bottom: 1px solid #e7eaec;
-  border-top: 1px solid #e7eaec;
-  margin-bottom: -1px;
-  padding: 11px 0px;
-  font-size: 13px;
-}
-
-.pull-right {
-  float: right !important;
-}
-
-.el-card__header {
-  padding: 14px 15px 7px !important;
-  min-height: 40px;
-}
-
-.el-card__body {
-  padding: 15px 20px 20px 20px !important;
-}
-
-.card-box {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-bottom: 10px;
-}
-
-/* button color */
-.el-button--cyan.is-active,
-.el-button--cyan:active {
-  background: #20B2AA;
-  border-color: #20B2AA;
-  color: #FFFFFF;
-}
-
-.el-button--cyan:focus,
-.el-button--cyan:hover {
-  background: #48D1CC;
-  border-color: #48D1CC;
-  color: #FFFFFF;
-}
-
-.el-button--cyan {
-  background-color: #20B2AA;
-  border-color: #20B2AA;
-  color: #FFFFFF;
-}
-
-/* text color */
-.text-navy {
-  color: #1ab394;
-}
-
-.text-primary {
-  color: inherit;
-}
-
-.text-success {
-  color: #1c84c6;
-}
-
-.text-info {
-  color: #23c6c8;
-}
-
-.text-warning {
-  color: #f8ac59;
-}
-
-.text-danger {
-  color: #ed5565;
-}
-
-.text-muted {
-  color: #888888;
-}
-
-/* image */
-.img-circle {
-  border-radius: 50%;
-}
-
-.img-lg {
-  width: 120px;
-  height: 120px;
-}
-
-.avatar-upload-preview {
-  position: absolute;
-  top: 50%;
-  transform: translate(50%, -50%);
-  width: 200px;
-  height: 200px;
-  border-radius: 50%;
-  box-shadow: 0 0 4px #ccc;
-  overflow: hidden;
-}
-
-/* 拖拽列样式 */
-.sortable-ghost {
-  opacity: .8;
-  color: #fff !important;
-  background: #42b983 !important;
-}
-
-/* 表格右侧工具栏样式 */
-.top-right-btn {
-  margin-left: auto;
-}
-
-body {
-  height: 100%;
-  margin: 0;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  text-rendering: optimizeLegibility;
-  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
-}
-
-label {
-  font-weight: 700;
-}
-
-html {
-  height: 100%;
-  box-sizing: border-box;
-}
-
-#app {
-  height: 100%;
-}
-
-*,
-*:before,
-*:after {
-  box-sizing: inherit;
-}
-
-.no-padding {
-  padding: 0px !important;
-}
-
-.padding-content {
-  padding: 4px 0;
-}
-
-a:focus,
-a:active {
-  outline: none;
-}
-
-a,
-a:focus,
-a:hover {
-  cursor: pointer;
-  color: inherit;
-  text-decoration: none;
-}
-
-div:focus {
-  outline: none;
-}
-
-.fr {
-  float: right;
-}
-
-.fl {
-  float: left;
-}
-
-.pr-5 {
-  padding-right: 5px;
-}
-
-.pl-5 {
-  padding-left: 5px;
-}
-
-.block {
-  display: block;
-}
-
-.pointer {
-  cursor: pointer;
-}
-
-.inlineBlock {
-  display: block;
-}
-
-.clearfix:after {
-  visibility: hidden;
-  display: block;
-  font-size: 0;
-  content: " ";
-  clear: both;
-  height: 0;
-}
-
-aside {
-  background: #eef1f6;
-  padding: 8px 24px;
-  margin-bottom: 20px;
-  border-radius: 2px;
-  display: block;
-  line-height: 32px;
-  font-size: 16px;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
-  color: #2c3e50;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-aside a {
-  color: #337ab7;
-  cursor: pointer;
-}
-
-aside a:hover {
-  color: #20a0ff;
-}
-
-.app-container {
-  padding: 20px;
-}
-
-.components-container {
-  margin: 30px 50px;
-  position: relative;
-}
-
-.text-center {
-  text-align: center;
-}
-
-.sub-navbar {
-  height: 50px;
-  line-height: 50px;
-  position: relative;
-  width: 100%;
-  text-align: right;
-  padding-right: 20px;
-  transition: 600ms ease position;
-  background: linear-gradient(90deg, #20b6f9 0%, #20b6f9 0%, #2178f1 100%, #2178f1 100%);
-}
-
-.sub-navbar .subtitle {
-  font-size: 20px;
-  color: #fff;
-}
-
-.sub-navbar.draft {
-  background: #d0d0d0;
-}
-
-.sub-navbar.deleted {
-  background: #d0d0d0;
-}
-
-.link-type,
-.link-type:focus {
-  color: #337ab7;
-  cursor: pointer;
-}
-
-.link-type:hover,
-.link-type:focus:hover {
-  color: #20a0ff;
-}
-
-.filter-container {
-  padding-bottom: 10px;
-}
-
-.filter-container .filter-item {
-  display: inline-block;
-  vertical-align: middle;
-  margin-bottom: 10px;
-}
-
-.cursor-pointer {
-  cursor: pointer;
-}
-
-.flex {
-  display: flex;
-}
-
-.flex2 {
-  display: flex;
-  justify-content: space-between;
-}
diff --git a/src/assets/styles/index.min.css b/src/assets/styles/index.min.css
deleted file mode 100644
index 0e718a7..0000000
--- a/src/assets/styles/index.min.css
+++ /dev/null
@@ -1 +0,0 @@
-:export{menuColor:#bfcbd9;menuLightColor:rgba(0,0,0,0.7);menuColorActive:#f4f4f5;menuBackground:#2C3443;menuLightBackground:#fff;subMenuBackground:#1f2d3d;subMenuHover:#001528;sideBarWidth:200px;logoTitleColor:#fff;logoLightTitleColor:#001529;primaryColor:#409EFF;successColor:#67C23A;dangerColor:#F56C6C;infoColor:#909399;warningColor:#E6A23C}.fade-enter-active,.fade-leave-active{transition:opacity 0.28s}.fade-enter,.fade-leave-active{opacity:0}.fade-transform--move,.fade-transform-leave-active,.fade-transform-enter-active{transition:all .5s}.fade-transform-enter{opacity:0;transform:translateX(-30px)}.fade-transform-leave-to{opacity:0;transform:translateX(30px)}.breadcrumb-enter-active,.breadcrumb-leave-active{transition:all .5s}.breadcrumb-enter,.breadcrumb-leave-active{opacity:0;transform:translateX(20px)}.breadcrumb-move{transition:all .5s}.breadcrumb-leave-active{position:absolute}.el-dialog{min-width:45vw}.el-dialog .el-form{margin-top:20px}.el-breadcrumb__inner,.el-breadcrumb__inner a{font-weight:400 !important}.el-upload input[type="file"]{display:none !important}.el-upload__input{display:none}.cell .el-tag{margin-right:0px}.small-padding .cell{padding-left:5px;padding-right:5px}.fixed-width .el-button--mini{padding:7px 10px;width:60px}.status-col .cell{padding:0 10px;text-align:center}.status-col .cell .el-tag{margin-right:0px}.el-dialog{border-radius:10px;background-color:#f4f7fa;min-height:40vh}.upload-container .el-upload{width:100%}.upload-container .el-upload .el-upload-dragger{width:100%;height:200px}.el-dropdown-menu a{display:block}.el-range-editor.el-input__inner{display:inline-flex !important}.el-range-separator{box-sizing:content-box}.el-menu--collapse>div>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-dropdown .el-dropdown-link{color:var(--el-color-primary) !important}#app .main-container{height:100%;transition:margin-left .28s;margin-left:200px;position:relative}#app .sidebarHide{margin-left:0 !important}#app .sidebar-container{-webkit-transition:width .28s;transition:width 0.28s;width:200px !important;background-color:#2C3443;height:100%;position:fixed;font-size:0px;top:0;bottom:0;left:0;z-index:1001;overflow:hidden;-webkit-box-shadow:2px 0 6px rgba(0,21,41,0.35);box-shadow:2px 0 6px rgba(0,21,41,0.35)}#app .sidebar-container .horizontal-collapse-transition{transition:0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out}#app .sidebar-container .scrollbar-wrapper{overflow-x:hidden !important}#app .sidebar-container .el-scrollbar__bar.is-vertical{right:0px}#app .sidebar-container .el-scrollbar{height:100%}#app .sidebar-container.has-logo .el-scrollbar{height:calc(100% - 50px)}#app .sidebar-container .is-horizontal{display:none}#app .sidebar-container a{display:inline-block;width:100%;overflow:hidden}#app .sidebar-container .svg-icon{margin-right:16px}#app .sidebar-container .el-menu{border:none;height:100%;width:100% !important}#app .sidebar-container .el-menu-item,#app .sidebar-container .menu-title{overflow:hidden !important;text-overflow:ellipsis !important;white-space:nowrap !important}#app .sidebar-container .el-menu-item .el-menu-tooltip__trigger{display:inline-block !important}#app .sidebar-container .sub-menu-title-noDropdown:hover,#app .sidebar-container .el-sub-menu__title:hover{background-color:rgba(0,0,0,0.06) !important}#app .sidebar-container .theme-dark .is-active>.el-sub-menu__title{color:#f4f4f5 !important}#app .sidebar-container .nest-menu .el-sub-menu>.el-sub-menu__title,#app .sidebar-container .el-sub-menu .el-menu-item{min-width:200px !important}#app .sidebar-container .nest-menu .el-sub-menu>.el-sub-menu__title:hover,#app .sidebar-container .el-sub-menu .el-menu-item:hover{background-color:rgba(0,0,0,0.06) !important}#app .sidebar-container .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title,#app .sidebar-container .theme-dark .el-sub-menu .el-menu-item{background-color:#1f2d3d !important}#app .sidebar-container .theme-dark .nest-menu .el-sub-menu>.el-sub-menu__title:hover,#app .sidebar-container .theme-dark .el-sub-menu .el-menu-item:hover{background-color:#001528 !important}#app .hideSidebar .sidebar-container{width:54px !important}#app .hideSidebar .main-container{margin-left:54px}#app .hideSidebar .sub-menu-title-noDropdown{padding:0 !important;position:relative}#app .hideSidebar .sub-menu-title-noDropdown .el-tooltip{padding:0 !important}#app .hideSidebar .sub-menu-title-noDropdown .el-tooltip .svg-icon{margin-left:20px}#app .hideSidebar .el-sub-menu{overflow:hidden}#app .hideSidebar .el-sub-menu>.el-sub-menu__title{padding:0 !important}#app .hideSidebar .el-sub-menu>.el-sub-menu__title .svg-icon{margin-left:20px}#app .hideSidebar .el-menu--collapse .el-sub-menu>.el-sub-menu__title>span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}#app .hideSidebar .el-menu--collapse .el-sub-menu>.el-sub-menu__title>i{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}#app .el-menu--collapse .el-menu .el-sub-menu{min-width:200px !important}#app .mobile .main-container{margin-left:0px}#app .mobile .sidebar-container{transition:transform .28s;width:200px !important}#app .mobile.hideSidebar .sidebar-container{pointer-events:none;transition-duration:0.3s;transform:translate3d(-200px, 0, 0)}#app .withoutAnimation .main-container,#app .withoutAnimation .sidebar-container{transition:none}.el-menu--vertical>.el-menu .svg-icon{margin-right:16px}.el-menu--vertical .nest-menu .el-sub-menu>.el-sub-menu__title:hover,.el-menu--vertical .el-menu-item:hover{background-color:rgba(0,0,0,0.06) !important}.el-menu--vertical>.el-menu--popup{max-height:100vh;overflow-y:auto}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar-track-piece{background:#d3dce6}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar{width:6px}.el-menu--vertical>.el-menu--popup::-webkit-scrollbar-thumb{background:#99a9bf;border-radius:20px}:export{menuColor:#bfcbd9;menuLightColor:rgba(0,0,0,0.7);menuColorActive:#f4f4f5;menuBackground:#2C3443;menuLightBackground:#fff;subMenuBackground:#1f2d3d;subMenuHover:#001528;sideBarWidth:200px;logoTitleColor:#fff;logoLightTitleColor:#001529;primaryColor:#409EFF;successColor:#67C23A;dangerColor:#F56C6C;infoColor:#909399;warningColor:#E6A23C}.blue-btn{background:#2C3443}.blue-btn:hover{color:#2C3443}.blue-btn:hover:before,.blue-btn:hover:after{background:#2C3443}.light-blue-btn{background:#3A71A8}.light-blue-btn:hover{color:#3A71A8}.light-blue-btn:hover:before,.light-blue-btn:hover:after{background:#3A71A8}.red-btn{background:#C03639}.red-btn:hover{color:#C03639}.red-btn:hover:before,.red-btn:hover:after{background:#C03639}.pink-btn{background:#E65D6E}.pink-btn:hover{color:#E65D6E}.pink-btn:hover:before,.pink-btn:hover:after{background:#E65D6E}.green-btn{background:#30B08F}.green-btn:hover{color:#30B08F}.green-btn:hover:before,.green-btn:hover:after{background:#30B08F}.tiffany-btn{background:#4AB7BD}.tiffany-btn:hover{color:#4AB7BD}.tiffany-btn:hover:before,.tiffany-btn:hover:after{background:#4AB7BD}.yellow-btn{background:#FEC171}.yellow-btn:hover{color:#FEC171}.yellow-btn:hover:before,.yellow-btn:hover:after{background:#FEC171}.pan-btn{font-size:14px;color:#fff;padding:14px 36px;border-radius:8px;border:none;outline:none;transition:600ms ease all;position:relative;display:inline-block}.pan-btn:hover{background:#fff}.pan-btn:hover:before,.pan-btn:hover:after{width:100%;transition:600ms ease all}.pan-btn:before,.pan-btn:after{content:'';position:absolute;top:0;right:0;height:2px;width:0;transition:400ms ease all}.pan-btn::after{right:inherit;top:inherit;left:0;bottom:0}.custom-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;color:#fff;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;padding:10px 15px;font-size:14px;border-radius:4px}.pt5{padding-top:5px}.pr5{padding-right:5px}.pb5{padding-bottom:5px}.mt5{margin-top:5px}.mr5{margin-right:5px}.mb5{margin-bottom:5px}.mb8{margin-bottom:8px}.ml5{margin-left:5px}.mt10{margin-top:10px}.mr10{margin-right:10px}.mb10{margin-bottom:10px}.ml10{margin-left:10px}.mt20{margin-top:20px}.mr20{margin-right:20px}.mb20{margin-bottom:20px}.ml20{margin-left:20px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.el-form .el-form-item__label{font-weight:700}.el-dialog.scrollbar .el-dialog__body{overflow:auto;overflow-x:hidden;max-height:70vh;padding:10px 20px 0}.el-table .el-table__header-wrapper th,.el-table .el-table__fixed-header-wrapper th{word-break:break-word;background-color:#f8f8f9 !important;color:#515a6e;height:40px !important;font-size:13px}.el-table .el-table__body-wrapper .el-button [class*="el-icon-"]+span{margin-left:1px}.form-header{font-size:15px;color:#6379bb;border-bottom:1px solid #ddd;margin:8px 10px 25px 10px;padding-bottom:5px}.pagination-container{position:relative;height:25px;margin-bottom:10px;margin-top:15px;padding:10px 20px !important}.el-dialog .pagination-container{position:static !important}.tree-border{margin-top:5px;border:1px solid #e5e6e7;background:#FFFFFF none;border-radius:4px;width:100%}.pagination-container .el-pagination{right:0;position:absolute}@media (max-width: 768px){.pagination-container .el-pagination>.el-pagination__jump{display:none !important}.pagination-container .el-pagination>.el-pagination__sizes{display:none !important}}.el-table .fixed-width .el-button--small{padding-left:0;padding-right:0;width:inherit}.el-table .el-dropdown-link{cursor:pointer;color:#409EFF;margin-left:10px}.el-table .el-dropdown,.el-icon-arrow-down{font-size:12px}.el-tree-node__content>.el-checkbox{margin-right:8px}.list-group-striped>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.list-group{padding-left:0px;list-style:none}.list-group-item{border-bottom:1px solid #e7eaec;border-top:1px solid #e7eaec;margin-bottom:-1px;padding:11px 0px;font-size:13px}.pull-right{float:right !important}.el-card__header{padding:14px 15px 7px !important;min-height:40px}.el-card__body{padding:15px 20px 20px 20px !important}.card-box{padding-right:15px;padding-left:15px;margin-bottom:10px}.el-button--cyan.is-active,.el-button--cyan:active{background:#20B2AA;border-color:#20B2AA;color:#FFFFFF}.el-button--cyan:focus,.el-button--cyan:hover{background:#48D1CC;border-color:#48D1CC;color:#FFFFFF}.el-button--cyan{background-color:#20B2AA;border-color:#20B2AA;color:#FFFFFF}.text-navy{color:#1ab394}.text-primary{color:inherit}.text-success{color:#1c84c6}.text-info{color:#23c6c8}.text-warning{color:#f8ac59}.text-danger{color:#ed5565}.text-muted{color:#888888}.img-circle{border-radius:50%}.img-lg{width:120px;height:120px}.avatar-upload-preview{position:absolute;top:50%;transform:translate(50%, -50%);width:200px;height:200px;border-radius:50%;box-shadow:0 0 4px #ccc;overflow:hidden}.sortable-ghost{opacity:.8;color:#fff !important;background:#42b983 !important}.top-right-btn{margin-left:auto}body{height:100%;margin:0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-family:Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif}label{font-weight:700}html{height:100%;box-sizing:border-box}#app{height:100%}*,*:before,*:after{box-sizing:inherit}.no-padding{padding:0px !important}.padding-content{padding:4px 0}a:focus,a:active{outline:none}a,a:focus,a:hover{cursor:pointer;color:inherit;text-decoration:none}div:focus{outline:none}.fr{float:right}.fl{float:left}.pr-5{padding-right:5px}.pl-5{padding-left:5px}.block{display:block}.pointer{cursor:pointer}.inlineBlock{display:block}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}aside{background:#eef1f6;padding:8px 24px;margin-bottom:20px;border-radius:2px;display:block;line-height:32px;font-size:16px;font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;color:#2c3e50;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}aside a{color:#337ab7;cursor:pointer}aside a:hover{color:#20a0ff}.app-container{padding:20px}.components-container{margin:30px 50px;position:relative}.pagination-container{margin-top:30px}.text-center{text-align:center}.sub-navbar{height:50px;line-height:50px;position:relative;width:100%;text-align:right;padding-right:20px;transition:600ms ease position;background:linear-gradient(90deg, #20b6f9 0%, #20b6f9 0%, #2178f1 100%, #2178f1 100%)}.sub-navbar .subtitle{font-size:20px;color:#fff}.sub-navbar.draft{background:#d0d0d0}.sub-navbar.deleted{background:#d0d0d0}.link-type,.link-type:focus{color:#337ab7;cursor:pointer}.link-type:hover,.link-type:focus:hover{color:#20a0ff}.filter-container{padding-bottom:10px}.filter-container .filter-item{display:inline-block;vertical-align:middle;margin-bottom:10px}.cursor-pointer{cursor:pointer}.flex{display:flex}.flex2{display:flex;justify-content:space-between}
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index 50ba487..75d093f 100644
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -6,6 +6,13 @@
 @import './btn.scss';
 @import './ruoyi.scss';
 
+html{
+  font-size: 16px;
+  //控制初始字体大小
+  @media(min-width: 1921px) and (max-width: 3840px) {
+    font-size: 32px;
+  }
+}
 body {
   height: 100%;
   margin: 0;
@@ -202,4 +209,4 @@
   .el-form-item{
     width: 46%;
   }
-}
+}
\ No newline at end of file
diff --git a/src/assets/styles/ruoyi.css b/src/assets/styles/ruoyi.css
deleted file mode 100644
index 2c6cb29..0000000
--- a/src/assets/styles/ruoyi.css
+++ /dev/null
@@ -1,261 +0,0 @@
-@charset "UTF-8";
-/**
- * 通用css样式布局处理
- * Copyright (c) 2019 ruoyi
- */
-/** 基础通用 **/
-.pt5 {
-  padding-top: 5px;
-}
-
-.pr5 {
-  padding-right: 5px;
-}
-
-.pb5 {
-  padding-bottom: 5px;
-}
-
-.mt5 {
-  margin-top: 5px;
-}
-
-.mr5 {
-  margin-right: 5px;
-}
-
-.mb5 {
-  margin-bottom: 5px;
-}
-
-.mb8 {
-  margin-bottom: 8px;
-}
-
-.ml5 {
-  margin-left: 5px;
-}
-
-.mt10 {
-  margin-top: 10px;
-}
-
-.mr10 {
-  margin-right: 10px;
-}
-
-.mb10 {
-  margin-bottom: 10px;
-}
-
-.ml10 {
-  margin-left: 10px;
-}
-
-.mt20 {
-  margin-top: 20px;
-}
-
-.mr20 {
-  margin-right: 20px;
-}
-
-.mb20 {
-  margin-bottom: 20px;
-}
-
-.ml20 {
-  margin-left: 20px;
-}
-
-.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
-  font-family: inherit;
-  font-weight: 500;
-  line-height: 1.1;
-  color: inherit;
-}
-
-.el-form .el-form-item__label {
-  font-weight: 700;
-}
-
-.el-dialog.scrollbar .el-dialog__body {
-  overflow: auto;
-  overflow-x: hidden;
-  max-height: 70vh;
-  padding: 10px 20px 0;
-}
-
-.el-table .el-table__header-wrapper th, .el-table .el-table__fixed-header-wrapper th {
-  word-break: break-word;
-  background-color: #f8f8f9 !important;
-  color: #515a6e;
-  height: 40px !important;
-  font-size: 13px;
-}
-
-.el-table .el-table__body-wrapper .el-button [class*="el-icon-"] + span {
-  margin-left: 1px;
-}
-
-/** 表单布局 **/
-.form-header {
-  font-size: 15px;
-  color: #6379bb;
-  border-bottom: 1px solid #ddd;
-  margin: 8px 10px 25px 10px;
-  padding-bottom: 5px;
-}
-
-/* tree border */
-.tree-border {
-  margin-top: 5px;
-  border: 1px solid #e5e6e7;
-  background: #FFFFFF none;
-  border-radius: 4px;
-  width: 100%;
-}
-
-.el-table .fixed-width .el-button--small {
-  padding-left: 0;
-  padding-right: 0;
-  width: inherit;
-}
-
-/** 表格更多操作下拉样式 */
-.el-table .el-dropdown-link {
-  cursor: pointer;
-  color: #409EFF;
-  margin-left: 10px;
-}
-
-.el-table .el-dropdown, .el-icon-arrow-down {
-  font-size: 12px;
-}
-
-.el-tree-node__content > .el-checkbox {
-  margin-right: 8px;
-}
-
-.list-group-striped > .list-group-item {
-  border-left: 0;
-  border-right: 0;
-  border-radius: 0;
-  padding-left: 0;
-  padding-right: 0;
-}
-
-.list-group {
-  padding-left: 0px;
-  list-style: none;
-}
-
-.list-group-item {
-  border-bottom: 1px solid #e7eaec;
-  border-top: 1px solid #e7eaec;
-  margin-bottom: -1px;
-  padding: 11px 0px;
-  font-size: 13px;
-}
-
-.pull-right {
-  float: right !important;
-}
-
-.el-card__header {
-  padding: 14px 15px 7px !important;
-  min-height: 40px;
-}
-
-.el-card__body {
-  padding: 15px 20px 20px 20px !important;
-}
-
-.card-box {
-  padding-right: 15px;
-  padding-left: 15px;
-  margin-bottom: 10px;
-}
-
-/* button color */
-.el-button--cyan.is-active,
-.el-button--cyan:active {
-  background: #20B2AA;
-  border-color: #20B2AA;
-  color: #FFFFFF;
-}
-
-.el-button--cyan:focus,
-.el-button--cyan:hover {
-  background: #48D1CC;
-  border-color: #48D1CC;
-  color: #FFFFFF;
-}
-
-.el-button--cyan {
-  background-color: #20B2AA;
-  border-color: #20B2AA;
-  color: #FFFFFF;
-}
-
-/* text color */
-.text-navy {
-  color: #1ab394;
-}
-
-.text-primary {
-  color: inherit;
-}
-
-.text-success {
-  color: #1c84c6;
-}
-
-.text-info {
-  color: #23c6c8;
-}
-
-.text-warning {
-  color: #f8ac59;
-}
-
-.text-danger {
-  color: #ed5565;
-}
-
-.text-muted {
-  color: #888888;
-}
-
-/* image */
-.img-circle {
-  border-radius: 50%;
-}
-
-.img-lg {
-  width: 120px;
-  height: 120px;
-}
-
-.avatar-upload-preview {
-  position: absolute;
-  top: 50%;
-  transform: translate(50%, -50%);
-  width: 200px;
-  height: 200px;
-  border-radius: 50%;
-  box-shadow: 0 0 4px #ccc;
-  overflow: hidden;
-}
-
-/* 拖拽列样式 */
-.sortable-ghost {
-  opacity: .8;
-  color: #fff !important;
-  background: #42b983 !important;
-}
-
-/* 表格右侧工具栏样式 */
-.top-right-btn {
-  margin-left: auto;
-}
diff --git a/src/assets/styles/ruoyi.min.css b/src/assets/styles/ruoyi.min.css
deleted file mode 100644
index 78c503d..0000000
--- a/src/assets/styles/ruoyi.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.pt5{padding-top:5px}.pr5{padding-right:5px}.pb5{padding-bottom:5px}.mt5{margin-top:5px}.mr5{margin-right:5px}.mb5{margin-bottom:5px}.mb8{margin-bottom:8px}.ml5{margin-left:5px}.mt10{margin-top:10px}.mr10{margin-right:10px}.mb10{margin-bottom:10px}.ml10{margin-left:10px}.mt20{margin-top:20px}.mr20{margin-right:20px}.mb20{margin-bottom:20px}.ml20{margin-left:20px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.el-form .el-form-item__label{font-weight:700}.el-dialog.scrollbar .el-dialog__body{overflow:auto;overflow-x:hidden;max-height:70vh;padding:10px 20px 0}.el-table .el-table__header-wrapper th,.el-table .el-table__fixed-header-wrapper th{word-break:break-word;background-color:#f8f8f9 !important;color:#515a6e;height:40px !important;font-size:13px}.el-table .el-table__body-wrapper .el-button [class*="el-icon-"]+span{margin-left:1px}.form-header{font-size:15px;color:#6379bb;border-bottom:1px solid #ddd;margin:8px 10px 25px 10px;padding-bottom:5px}.pagination-container{position:relative;height:25px;margin-bottom:10px;margin-top:15px;padding:10px 20px !important}.el-dialog .pagination-container{position:static !important}.tree-border{margin-top:5px;border:1px solid #e5e6e7;background:#FFFFFF none;border-radius:4px;width:100%}.pagination-container .el-pagination{right:0;position:absolute}@media (max-width: 768px){.pagination-container .el-pagination>.el-pagination__jump{display:none !important}.pagination-container .el-pagination>.el-pagination__sizes{display:none !important}}.el-table .fixed-width .el-button--small{padding-left:0;padding-right:0;width:inherit}.el-table .el-dropdown-link{cursor:pointer;color:#409EFF;margin-left:10px}.el-table .el-dropdown,.el-icon-arrow-down{font-size:12px}.el-tree-node__content>.el-checkbox{margin-right:8px}.list-group-striped>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.list-group{padding-left:0px;list-style:none}.list-group-item{border-bottom:1px solid #e7eaec;border-top:1px solid #e7eaec;margin-bottom:-1px;padding:11px 0px;font-size:13px}.pull-right{float:right !important}.el-card__header{padding:14px 15px 7px !important;min-height:40px}.el-card__body{padding:15px 20px 20px 20px !important}.card-box{padding-right:15px;padding-left:15px;margin-bottom:10px}.el-button--cyan.is-active,.el-button--cyan:active{background:#20B2AA;border-color:#20B2AA;color:#FFFFFF}.el-button--cyan:focus,.el-button--cyan:hover{background:#48D1CC;border-color:#48D1CC;color:#FFFFFF}.el-button--cyan{background-color:#20B2AA;border-color:#20B2AA;color:#FFFFFF}.text-navy{color:#1ab394}.text-primary{color:inherit}.text-success{color:#1c84c6}.text-info{color:#23c6c8}.text-warning{color:#f8ac59}.text-danger{color:#ed5565}.text-muted{color:#888888}.img-circle{border-radius:50%}.img-lg{width:120px;height:120px}.avatar-upload-preview{position:absolute;top:50%;transform:translate(50%, -50%);width:200px;height:200px;border-radius:50%;box-shadow:0 0 4px #ccc;overflow:hidden}.sortable-ghost{opacity:.8;color:#fff !important;background:#42b983 !important}.top-right-btn{margin-left:auto}
diff --git a/src/assets/styles/variables.module.css b/src/assets/styles/variables.module.css
deleted file mode 100644
index 57642eb..0000000
--- a/src/assets/styles/variables.module.css
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
-$base-menu-color:hsla(0,0%,100%,.65);
-$base-menu-color-active:#fff;
-$base-menu-background:#001529;
-$base-logo-title-color: #ffffff;
-
-$base-menu-light-color:rgba(0,0,0,.70);
-$base-menu-light-background:#ffffff;
-$base-logo-light-title-color: #001529;
-
-$base-sub-menu-background:#000c17;
-$base-sub-menu-hover:#001528;
-*/
-:export {
-  menuColor: #bfcbd9;
-  menuLightColor: rgba(0, 0, 0, 0.7);
-  menuColorActive: #f4f4f5;
-  menuBackground: #2C3443;
-  menuLightBackground: #ffffff;
-  subMenuBackground: #1f2d3d;
-  subMenuHover: #001528;
-  sideBarWidth: 200px;
-  logoTitleColor: #ffffff;
-  logoLightTitleColor: #001529;
-  primaryColor: #409EFF;
-  successColor: #67C23A;
-  dangerColor: #F56C6C;
-  infoColor: #909399;
-  warningColor: #E6A23C;
-}
diff --git a/src/assets/styles/variables.module.min.css b/src/assets/styles/variables.module.min.css
deleted file mode 100644
index 8054a37..0000000
--- a/src/assets/styles/variables.module.min.css
+++ /dev/null
@@ -1 +0,0 @@
-:export{menuColor:#bfcbd9;menuLightColor:rgba(0,0,0,0.7);menuColorActive:#f4f4f5;menuBackground:#2C3443;menuLightBackground:#fff;subMenuBackground:#1f2d3d;subMenuHover:#001528;sideBarWidth:200px;logoTitleColor:#fff;logoLightTitleColor:#001529;primaryColor:#409EFF;successColor:#67C23A;dangerColor:#F56C6C;infoColor:#909399;warningColor:#E6A23C}
diff --git a/src/components/Table/index.vue b/src/components/Table/index.vue
index 1c3c1b5..7c01647 100644
--- a/src/components/Table/index.vue
+++ b/src/components/Table/index.vue
@@ -14,6 +14,10 @@
 import {onMounted, ref} from "vue";
 
 const props = defineProps({
+    searchData: {
+        type: Object,
+        default: () => {}
+    },
     getList: {
         type: Function,
         default: () => {},
@@ -38,12 +42,13 @@
 })
 const loading = ref(false);
 
-const getData = (data) => {
-    const pagedata = { limit: state.limit, page: data.page}
+// 默认第一页
+const getData = (data={page:1}) => {
+    const pagedata = { limit: state.limit, page: data.page, ...props.searchData }
     loading.value = true;
     props.getList(pagedata).then(res => {
-        state.list = res.list
-        state.total = res.total
+        state.list = res.data.list
+        state.total = res.data.total
     }).finally(() => {
         loading.value = false;
     })
@@ -51,6 +56,11 @@
 
 onMounted(() =>{
     getData({ page: state.page })
+})
+
+// 将方法抛出去,外面可以调用
+defineExpose({
+    getData
 })
 </script>
 
@@ -94,17 +104,16 @@
                 </el-table-column>
             </template>
         </el-table>
-        <div class="pagination">
+        <div class="pagination" v-show="state.total > 0">
             <div class="pagination-total">共{{state.total}}条</div>
             <pagination
-                v-show="state.total > 0"
                 layout="prev, pager, next, jumper"
                 :total="state.total"
                 :page="state.current"
                 :limit="state.limit"
                 @pagination="getData"
             />
-            <!-- 页面右侧自定义插槽,可以加自定义按钮 -->
+            <!-- 页码右侧自定义插槽,可以加自定义按钮 -->
             <slot name="pagination"></slot>
         </div>
     </div>
@@ -119,6 +128,9 @@
         color: #fff;
     }
 }
+:deep(.el-table--default .el-table__cell){
+    padding: 12px 0;
+}
 :deep(.pagination-container){
     background-color: transparent;
     margin: 0;
diff --git a/src/components/TopNav/index.vue b/src/components/TopNav/index.vue
index 52b40ea..ed3b45c 100644
--- a/src/components/TopNav/index.vue
+++ b/src/components/TopNav/index.vue
@@ -169,7 +169,7 @@
 })
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .topmenu-container.el-menu--horizontal > .el-menu-item {
   float: left;
   height: 50px !important;
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
index ef7b361..9f10730 100644
--- a/src/layout/components/AppMain.vue
+++ b/src/layout/components/AppMain.vue
@@ -51,7 +51,7 @@
 }
 </style>
 
-<style lang="scss">
+<style lang="scss" scoped>
 // fix css style bug in open el-dialog
 .el-popup-parent--hidden {
   .fixed-header {
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
index e9404f2..3d2991f 100644
--- a/src/layout/components/TagsView/index.vue
+++ b/src/layout/components/TagsView/index.vue
@@ -313,7 +313,7 @@
 }
 </style>
 
-<style lang="scss">
+<style lang="scss" scoped>
 //reset element css of el-icon-close
 .tags-view-wrapper {
   .tags-view-item {
diff --git a/src/utils/index.js b/src/utils/index.js
index 35b043c..8994d62 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -472,4 +472,16 @@
 export function isNumberStr(str) {
   return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
 }
+
+/**
+ * blob文件流导出
+ */
+export function exportBlobFile(blob) {
+  const link = document.createElement('a')
+  const url = URL || window.webkitURL
+  const href = url.createObjectURL(blob)
+  link.href = href;
+  link.download = '报警记录.xlsx'
+  link.click()
+}
  
diff --git a/src/views/screen/flow/report/index.vue b/src/views/screen/flow/report/index.vue
index b33bbe8..061c394 100644
--- a/src/views/screen/flow/report/index.vue
+++ b/src/views/screen/flow/report/index.vue
@@ -9,28 +9,30 @@
 ])
 const time = ref()
 let tableHead = [
-    { prop: 'code', label: '报警代码' },
-    { prop: 'shebei', label: '报警设备', },
-    { prop: 'content', label: '报警内容' },
-    { prop: 'time', label: '报警时间' },
-    { prop: 'sure', label: '报警确认', slot: true },
+    { prop: 'code', label: '流速 (m/s)' },
+    { prop: 'shebei', label: '瞬时流量 (m³/h)', },
+    { prop: 'content', label: '累计流量 (m³)' },
+    { prop: 'sure', label: '采集点' },
+    { prop: 'time', label: '采集时间' },
 ]
 
 const getTableData = () => {
     return new Promise(resolve => {
         let arr = {
-            list: [
-                { code: '201', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '202', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
-                { code: '203', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
-                { code: '204', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '205', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '206', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '207', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '208', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
-                { code: '209', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
-                { code: '2010', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
-            ],
+            data:{
+                list: [
+                    { code: '201', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '202', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
+                    { code: '203', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
+                    { code: '204', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '205', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '206', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '207', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '208', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
+                    { code: '209', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
+                    { code: '2010', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
+                ]
+            },
             total: 30,
         }
         resolve(arr)
@@ -73,6 +75,7 @@
             <el-date-picker
                 v-model="time"
                 type="datetimerange"
+                format="YYYY-MM-DD HH:mm:ss"
                 size="large"
                 style="width: 30rem"
                 range-separator="至"
diff --git a/src/views/screen/flow/warning/index.vue b/src/views/screen/flow/warning/index.vue
index 4ee3228..bfec15f 100644
--- a/src/views/screen/flow/warning/index.vue
+++ b/src/views/screen/flow/warning/index.vue
@@ -1,17 +1,28 @@
 <script setup>
-import {onMounted, ref} from "vue";
+import {onMounted, ref, reactive} from "vue";
 import * as echarts from 'echarts/core';
 import Table from '@/components/Table/index.vue'
+import { warnHistory, exportWarnHistory } from '@/api/screen/warning/index.js'
+import { exportBlobFile } from '@/utils/index.js'
 
+const tableRef = ref(null)
 const timeType = ref(0)
 const warnChartRef = ref()
+const exportTime = ref()
+const searchData = reactive({
+    createTimeRange: ''
+})
+
+const openDialog = ref(false)
+const dialogInfo = ref()
+
 let warnCharts = null;
 let tableHead = [
     { prop: 'code', label: '报警代码' },
-    { prop: 'shebei', label: '报警设备', },
-    { prop: 'content', label: '报警内容' },
-    { prop: 'time', label: '报警时间' },
-    { prop: 'sure', label: '报警确认', slot: true },
+    { prop: 'facilityName', label: '报警设备', },
+    { prop: 'description', label: '报警内容' },
+    { prop: 'lastTimeView', label: '报警时间' },
+    { prop: 'isConfirm', label: '报警确认', slot: true },
 ]
 
 const initWarnChart = () => {
@@ -61,26 +72,28 @@
     }
 }
 
-const getTableData = () => {
-    return new Promise(resolve => {
-        let arr = {
-            list: [
-                { code: '201', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '202', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
-                { code: '203', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
-                { code: '204', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '205', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '206', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '207', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
-                { code: '208', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
-                { code: '209', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
-                { code: '2010', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
-            ],
-            total: 30,
-        }
-        resolve(arr)
+const searchTable = () => {
+    if(exportTime.value) {
+        searchData.createTimeRange = exportTime.value[0] + '~' + exportTime.value[1]
+    }
+    tableRef.value.getData()
+}
+
+// 导出报警报表
+const exportWarnTabl = () => {
+    exportWarnHistory({ createTimeRange: searchData.createTimeRange }).then(res => {
+        exportBlobFile(res)
     })
 }
+
+// 获取报警内容
+const getWarnInfi = (data) => {
+    dialogInfo.value = data
+    openDialog.value = true
+}
+
+// 处理报警内容
+const handleComfirm = () => {}
 
 onMounted(() => {
     initWarnChart()
@@ -105,20 +118,77 @@
         <div class="warn-r item">
             <div class="item-t">
                 <div class="name">报警记录</div>
+                <div>
+                    <el-date-picker
+                        v-model="exportTime"
+                        type="datetimerange"
+                        format="YYYY-MM-DD HH:mm:ss"
+                        value-format="YYYY-MM-DD HH:mm:ss"
+                        style="width: 28rem"
+                        range-separator="至"
+                        start-placeholder="开始时间"
+                        end-placeholder="结束时间"
+                    />
+                    <el-button type="primary" style="margin-left: 15px" @click="searchTable">搜索</el-button>
+                </div>
             </div>
             <div class="warn-table">
-                <Table :getList="getTableData" :headList="tableHead">
-                    <template #sure="scope">
-                        <div v-if="scope.row.sure === 1" style="color: #1ab394">已处理</div>
-                        <div v-else-if="scope.row.sure === 2"  style="color: #e8ab04">未处理</div>
-                        <div v-else style="color: #f30101">待确认</div>
+                <Table :getList="warnHistory" :searchData="searchData" :headList="tableHead" ref="tableRef">
+                    <template #isConfirm="scope">
+                        <div v-if="scope.row.isConfirm === 200" style="color: #1ab394">已处理</div>
+                        <div v-else-if="scope.row.isConfirm === 20"  style="color: #e8ab04" @click="getWarnInfi(scope.row)">未处理</div>
+                        <div v-else style="color: #f30101" @click="getWarnInfi(scope.row)">待确认</div>
                     </template>
                     <template v-slot:pagination>
-                        <el-button type="success" style="width: 6rem">导出</el-button>
+                        <el-button type="success" style="width: 6rem" @click="exportWarnTabl">导出</el-button>
                     </template>
                 </Table>
             </div>
         </div>
+        <el-dialog
+            v-model="openDialog"
+            title="报警确认框"
+            width="40rem"
+            show-close
+            class="warnDialog"
+        >
+            <div class="message">
+                <div class="message-item">
+                    <div class="title">报警代码:</div>
+                    <div class="val">{{dialogInfo.code}}</div>
+                </div>
+                <div class="message-item">
+                    <div class="title">报警设备:</div>
+                    <div class="val">{{dialogInfo.facilityName}}</div>
+                </div>
+                <div class="message-item">
+                    <div class="title">报警内容:</div>
+                    <div class="val">{{dialogInfo.description}}</div>
+                </div>
+                <div class="message-line">
+                    <div class="title">报警时间:</div>
+                    <div class="val">{{dialogInfo.lastTime}}</div>
+                </div>
+                <div class="message-line">
+                    <div class="title">报警确认:</div>
+                    <div class="val">
+                        <el-radio-group v-model="timeType">
+                            <el-radio :value="1">已处理</el-radio>
+                            <el-radio :value="2">已证实</el-radio>
+                            <el-radio :value="3">误  报</el-radio>
+                        </el-radio-group>
+                    </div>
+                </div>
+            </div>
+            <template #footer>
+              <span class="dialog-footer">
+                <el-button @click="openDialog = false">取消</el-button>
+                <el-button type="primary" @click="handleComfirm">
+                  确定
+                </el-button>
+              </span>
+            </template>
+        </el-dialog>
     </div>
 </template>
 
@@ -146,6 +216,9 @@
                 font-size: 36px;
                 color: #fff;
             }
+            :deep(.el-date-editor){
+                flex-grow: 0;
+            }
             .select{
                 :deep(.el-radio){
                     color: #fff;
@@ -170,4 +243,28 @@
         }
     }
 }
+.warnDialog{
+    .message{
+        display: flex;
+        flex-wrap: wrap;
+        .message-item{
+            width: 50%;
+            display: flex;
+            align-items: center;
+            padding: 10px 0;
+            .val{
+                margin-left: 10px;
+            }
+        }
+        .message-line{
+            width: 100%;
+            padding: 10px 0;
+            display: flex;
+            align-items: center;
+            .val{
+                margin-left: 10px;
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/screen/temperature/graphic/index.vue b/src/views/screen/temperature/graphic/index.vue
index 5efa2d0..fa5c4cb 100644
--- a/src/views/screen/temperature/graphic/index.vue
+++ b/src/views/screen/temperature/graphic/index.vue
@@ -3,11 +3,69 @@
 </script>
 
 <template>
-    <div>
-        图形分析
+    <div class="graphic">
+        <div class="graphic-menu">
+            <div class="menu-t">监测点列表</div>
+            <el-menu class="el-menu">
+                <el-sub-menu index="1">
+                    <template #title>
+                        <span>可移动监测点</span>
+                    </template>
+                    <el-menu-item index="1-1">水电站流量监测点</el-menu-item>
+                </el-sub-menu>
+                <el-sub-menu index="2">
+                    <template #title>
+                        <span>固定位监测点</span>
+                    </template>
+                    <el-menu-item index="2-1">新扎口流量监测点</el-menu-item>
+                </el-sub-menu>
+            </el-menu>
+        </div>
     </div>
 </template>
 
 <style scoped lang="scss">
+.graphic {
+    height: 100%;
+    display: flex;
+    &-menu {
+        flex-shrink: 0;
+        width: 20%;
+        height: 100%;
+        padding: 10px 0;
+        background: linear-gradient(135deg, #91BDDB 0%, #9EC2DB 99%);
+        overflow-y: scroll;
 
+        &::-webkit-scrollbar {
+            display: none;
+        }
+
+        .menu-t {
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+            font-size: 26px;
+            color: #fff;
+            background: url("@/assets/images/flow/monitor-title-bg.png") no-repeat;
+            background-size: 100% 100%;
+        }
+
+        .el-menu {
+            background-color: transparent;
+            border-right: none;
+
+            :deep(.el-menu) {
+                background-color: transparent;
+            }
+
+            :deep(.el-sub-menu__title:hover) {
+                background-color: rgba(0, 0, 0, 0.06);
+            }
+
+            :deep(.el-menu-item.is-active) {
+                color: #fff;
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/screen/temperature/monitor/index.vue b/src/views/screen/temperature/monitor/index.vue
index 18de0f5..5ac61ee 100644
--- a/src/views/screen/temperature/monitor/index.vue
+++ b/src/views/screen/temperature/monitor/index.vue
@@ -1,13 +1,369 @@
  <script setup>
+ import {ref} from "vue";
+ import {getUserType} from '@/utils/auth.js'
+ const userType = ref(getUserType())
+ const monitorRef = ref()
+ const searchVal = ref('')
+ const selectType = ref(1);
+ const typeOption = ref([
+     { label: '水电站流量监测点', value: 1 },
+     { label: '新扎口流量监测点', value: 2 },
+ ])
+ const video = ref()
+
+ // 全屏操作
+ const handleFullScreen = () => {
+     monitorRef.value.requestFullscreen()
+ }
 
 </script>
 
 <template>
-    <div>
-        实时监测
+    <div class="monitor">
+        <div class="monitor-menu">
+            <div class="menu-t">监测点列表</div>
+            <el-menu class="el-menu">
+                <el-sub-menu index="1">
+                    <template #title>
+                        <span>可移动监测点</span>
+                    </template>
+                    <el-menu-item index="1-1">水电站流量监测点</el-menu-item>
+                </el-sub-menu>
+                <el-sub-menu index="2">
+                    <template #title>
+                        <span>固定位监测点</span>
+                    </template>
+                    <el-menu-item index="2-1">新扎口流量监测点</el-menu-item>
+                </el-sub-menu>
+            </el-menu>
+        </div>
+        <div class="monitor-info">
+            <div class="monitor-tool">
+                <div class="tool-l">
+                    <div class="name">监测点区域</div>
+                    <el-select
+                        v-model="selectType"
+                        class="tool-select"
+                        placeholder="Select"
+                        style="width: 15rem"
+                    >
+                        <el-option
+                            v-for="item in typeOption"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                        />
+                    </el-select>
+                    <el-input v-model="searchVal" style="width: 20rem" placeholder="请输入监测点名称" />
+                    <el-button><el-icon><Search /></el-icon>搜索</el-button>
+                    <el-button style="margin-left: 0" v-if="userType === '1'"><el-icon><Plus /></el-icon>新增</el-button>
+                </div>
+                <div class="tool-r" @click="handleFullScreen">
+                    <img src="@/assets/images/flow/fullscreen.png" />
+                    全屏
+                </div>
+            </div>
+            <div class="monitor-box" ref="monitorRef">
+                <div class="monitor-list">
+                    <div class="item">
+                        <div class="item-t">电站进水口水温监测点</div>
+                        <div class="item-data">
+                            <div class="data">
+                                <div class="name">水温:</div>
+                                <div class="val"><span>2</span>°C</div>
+                            </div>
+                            <div class="data">
+                                <div class="name">水位:</div>
+                                <div class="val"><span>2000</span>m</div>
+                            </div>
+                        </div>
+                        <div class="item-status">
+                            压力式水位水温计工作状况:
+                            <span >设备运作正常</span>
+                        </div>
+                        <div class="item-set">
+                            <div class="setbox">
+                                <div class="name">里程设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">投放度设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">高程设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水位下限设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水温下限设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水位计采集间隔设置:</div>
+                                <el-select>
+                                    <el-option>60s</el-option>
+                                    <el-option>120s</el-option>
+                                    <el-option>300s</el-option>
+                                    <el-option>600s</el-option>
+                                </el-select>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">记录上报间隔设置:</div>
+                                <el-select>
+                                    <el-option>60s</el-option>
+                                    <el-option>120s</el-option>
+                                    <el-option>300s</el-option>
+                                    <el-option>600s</el-option>
+                                </el-select>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">实时数据上报间隔设置:</div>
+                                <el-select>
+                                    <el-option>60s</el-option>
+                                    <el-option>120s</el-option>
+                                    <el-option>300s</el-option>
+                                    <el-option>600s</el-option>
+                                </el-select>
+                            </div>
+                        </div>
+                        <div class="item-btn"><el-button size="large" type="success">批量应用</el-button></div>
+                    </div>
+                    <div class="item">
+                        <div class="item-t">电站进水口水温监测点</div>
+                        <div class="item-data">
+                            <div class="data">
+                                <div class="name">水温:</div>
+                                <div class="val"><span>2</span>°C</div>
+                            </div>
+                            <div class="data">
+                                <div class="name">水位:</div>
+                                <div class="val"><span>2000</span>m</div>
+                            </div>
+                        </div>
+                        <div class="item-status">
+                            压力式水位水温计工作状况:
+                            <span >设备运作正常</span>
+                        </div>
+                        <div class="item-set">
+                            <div class="setbox">
+                                <div class="name">里程设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">投放度设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">高程设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水位下限设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水温下限设置:</div>
+                                <el-input  />
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水位计采集间隔设置:</div>
+                                <el-select>
+                                    <el-option>60s</el-option>
+                                    <el-option>120s</el-option>
+                                    <el-option>300s</el-option>
+                                    <el-option>600s</el-option>
+                                </el-select>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">记录上报间隔设置:</div>
+                                <el-select>
+                                    <el-option>60s</el-option>
+                                    <el-option>120s</el-option>
+                                    <el-option>300s</el-option>
+                                    <el-option>600s</el-option>
+                                </el-select>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">实时数据上报间隔设置:</div>
+                                <el-select>
+                                    <el-option>60s</el-option>
+                                    <el-option>120s</el-option>
+                                    <el-option>300s</el-option>
+                                    <el-option>600s</el-option>
+                                </el-select>
+                            </div>
+                        </div>
+                        <div class="item-btn"><el-button size="large" type="success">批量应用</el-button></div>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
 </template>
 
 <style scoped lang="scss">
+.monitor {
+    height: 100%;
+    display: flex;
+    &-menu {
+        flex-shrink: 0;
+        width: 20%;
+        height: 100%;
+        padding: 10px 0;
+        background: linear-gradient(135deg, #91BDDB 0%, #9EC2DB 99%);
+        overflow-y: scroll;
 
+        &::-webkit-scrollbar {
+            display: none;
+        }
+
+        .menu-t {
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+            font-size: 26px;
+            color: #fff;
+            background: url("@/assets/images/flow/monitor-title-bg.png") no-repeat;
+            background-size: 100% 100%;
+        }
+
+        .el-menu {
+            background-color: transparent;
+            border-right: none;
+
+            :deep(.el-menu) {
+                background-color: transparent;
+            }
+
+            :deep(.el-sub-menu__title:hover) {
+                background-color: rgba(0, 0, 0, 0.06);
+            }
+
+            :deep(.el-menu-item.is-active) {
+                color: #fff;
+            }
+        }
+    }
+    .monitor-info{
+        flex-shrink: 0;
+        width: 80%;
+        height: 100%;
+        background: linear-gradient( 180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 100%);
+        .monitor-tool{
+            width: 100%;
+            height: 60px;
+            padding: 0 30px;
+            background: linear-gradient( 90deg, #91BDDB 0%, #DADFE3 100%);
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            .tool-l{
+                display: flex;
+                align-items: center;
+                gap: 1rem;
+                .name{
+                    font-size: 1.1rem;
+                }
+            }
+            .tool-r{
+                display: flex;
+                align-items: center;
+                img{
+                    width: 25px;
+                    margin-right: 10px;
+                }
+            }
+        }
+        .monitor-box{
+            height: calc(100% - 60px);
+            .monitor-list{
+                height: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                padding: 0 30px;
+                .item{
+                    width: 48%;
+                    height: 96%;
+                    background: rgba(23,108,229,0.3);
+                    border: 1px solid #176CE5;
+                    padding: 20px;
+                    border-radius: 8px;
+                    .item-t{
+                        font-size: 36px;
+                        color: #fff;
+                        text-align: center;
+                    }
+                    .item-data{
+                        height: 30%;
+                        display: flex;
+                        align-items: center;
+                        .data{
+                            width: 50%;
+                            display: flex;
+                            align-items: center;
+                            color: #fff;
+                            font-size: 22px;
+                            .val{
+                                span{
+                                    display: inline-block;
+                                    font-size: 30px;
+                                    padding: 0 30px;
+                                }
+                            }
+                        }
+                    }
+                    .item-status{
+                        height: 8%;
+                        font-size: 22px;
+                        color: #fff;
+                    }
+                    .item-set{
+                        display: flex;
+                        flex-wrap: wrap;
+                        align-content: center;
+                        .setbox{
+                            width: 50%;
+                            margin-top: 40px;
+                            padding: 0 10px;
+                            display: flex;
+                            align-items: center;
+                            .name{
+                                flex-shrink: 0;
+                                color: #fff;
+                            }
+                            :deep(.el-input__wrapper){
+                                background-color: transparent;
+                                border-bottom: 1px solid #fff;
+                                box-shadow: none;
+                                border-radius: 0;
+                            }
+                            :deep(.el-select__wrapper){
+                                background-color: transparent;
+                                box-shadow: none;
+                                border-radius: 0;
+                                .el-select__placeholder.is-transparent{
+                                    color: #FFF;
+                                }
+                                .el-select__suffix .el-select__caret{
+                                    color: #fff;
+                                }
+                            }
+                        }
+                    }
+                    .item-btn{
+                        height: 10%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: flex-end;
+                    }
+                }
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/screen/temperature/report/index.vue b/src/views/screen/temperature/report/index.vue
index 678bffa..061c394 100644
--- a/src/views/screen/temperature/report/index.vue
+++ b/src/views/screen/temperature/report/index.vue
@@ -1,13 +1,119 @@
 <script setup>
+import {ref} from "vue";
+import Table from '@/components/Table/index.vue'
+
+const selectType = ref(1);
+const typeOption = ref([
+    { label: '水电站流量监测点', value: 1 },
+    { label: '新扎口流量监测点', value: 2 },
+])
+const time = ref()
+let tableHead = [
+    { prop: 'code', label: '流速 (m/s)' },
+    { prop: 'shebei', label: '瞬时流量 (m³/h)', },
+    { prop: 'content', label: '累计流量 (m³)' },
+    { prop: 'sure', label: '采集点' },
+    { prop: 'time', label: '采集时间' },
+]
+
+const getTableData = () => {
+    return new Promise(resolve => {
+        let arr = {
+            data:{
+                list: [
+                    { code: '201', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '202', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
+                    { code: '203', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
+                    { code: '204', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '205', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '206', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '207', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 1 },
+                    { code: '208', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 2 },
+                    { code: '209', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
+                    { code: '2010', shebei: '雷达水位计', content: '设备离线', time: '2025-02-08', sure: 3 },
+                ]
+            },
+            total: 30,
+        }
+        resolve(arr)
+    })
+}
 
 </script>
 
 <template>
-    <div>
-        报表管理
+    <div class="report">
+        <div class="report-tool">
+            <el-select
+                v-model="selectType"
+                class="tool-select"
+                size="large"
+                placeholder="Select"
+                style="width: 20rem"
+            >
+                <el-option
+                    v-for="item in typeOption"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                />
+            </el-select>
+            <el-select
+                v-model="selectType"
+                class="tool-select"
+                size="large"
+                placeholder="Select"
+                style="width: 20rem"
+            >
+                <el-option
+                    v-for="item in typeOption"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                />
+            </el-select>
+            <el-date-picker
+                v-model="time"
+                type="datetimerange"
+                format="YYYY-MM-DD HH:mm:ss"
+                size="large"
+                style="width: 30rem"
+                range-separator="至"
+                start-placeholder="开始时间"
+                end-placeholder="结束时间"
+            />
+            <el-button type="success" size="large" style="width: 6rem">一键导出</el-button>
+        </div>
+        <div class="report-table">
+            <Table :getList="getTableData" :headList="tableHead"></Table>
+        </div>
     </div>
 </template>
 
 <style scoped lang="scss">
-
+.report{
+    height: 100%;
+    background: linear-gradient( 180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 100%);
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    &-tool{
+        padding: 10px 0;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        gap: 30px;
+        :deep(.el-date-editor){
+            flex-grow: 0;
+        }
+    }
+    &-table{
+        width: 96%;
+        height: 90%;
+        background: rgba(23,108,229,0.3);
+        border: 1px solid #176CE5;
+        border-radius: 8px;
+        padding: 20px;
+    }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/screen/temperature/shebei/index.vue b/src/views/screen/temperature/shebei/index.vue
index 2ccc251..a588778 100644
--- a/src/views/screen/temperature/shebei/index.vue
+++ b/src/views/screen/temperature/shebei/index.vue
@@ -1,13 +1,357 @@
 <script setup>
+import {ref} from "vue";
+import {getUserType} from '@/utils/auth.js'
+
+const userType = ref(getUserType())
+const monitorRef = ref()
+const searchVal = ref('')
+const selectNum = ref(6);
+const numOption = ref([
+    { label: '6个', value: 6 },
+    { label: '2个', value: 2 },
+    { label: '1个', value: 1 },
+])
+
+const shebeiData = ref([
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+    { name: '雷达水位计', code: 'SWY001', image: '', online: true, time: '2025-02-15', address: '上游灌木丛' },
+])
+
+// 全屏操作
+const handleFullScreen = () => {
+    monitorRef.value.requestFullscreen()
+}
 
 </script>
 
 <template>
-    <div>
-        设备管理
+    <div class="shebei">
+        <div class="shebei-menu">
+            <div class="menu-t">设备列表</div>
+            <el-menu class="el-menu">
+                <el-sub-menu index="1">
+                    <template #title>
+                        <span>雷达水位计</span>
+                    </template>
+                    <el-menu-item index="1-1">SWY001</el-menu-item>
+                    <el-menu-item index="1-2">SWY002</el-menu-item>
+                </el-sub-menu>
+                <el-sub-menu index="2">
+                    <template #title>
+                        <span>雷达测速仪</span>
+                    </template>
+                    <el-menu-item index="2-1">CY001</el-menu-item>
+                    <el-menu-item index="2-2">CY002</el-menu-item>
+                </el-sub-menu>
+                <el-sub-menu index="3">
+                    <template #title>
+                        <span>雷达流量计</span>
+                    </template>
+                    <el-menu-item index="3-1">LJL001</el-menu-item>
+                    <el-menu-item index="3-2">LJL002</el-menu-item>
+                </el-sub-menu>
+            </el-menu>
+        </div>
+        <div class="shebei-monitor">
+            <div class="monitor-tool">
+                <div class="tool-l">
+                    <div class="name">展示数量</div>
+                    <el-select
+                        v-model="selectNum"
+                        class="tool-select"
+                        placeholder="Select"
+                        style="width: 15rem"
+                    >
+                        <el-option
+                            v-for="item in numOption"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                        />
+                    </el-select>
+                    <el-input v-model="searchVal" style="width: 20rem" placeholder="请输入监测点名称" />
+                    <el-button><el-icon><Search /></el-icon>搜索</el-button>
+                    <el-button style="margin-left: 0" v-if="userType === '1'"><el-icon><Plus /></el-icon>新增</el-button>
+                </div>
+                <div class="tool-r" @click="handleFullScreen">
+                    <img src="@/assets/images/flow/fullscreen.png" />
+                    全屏
+                </div>
+            </div>
+            <div class="monitor-box" ref="monitorRef">
+                <div class="list-six list" v-if="selectNum === 6">
+                    <div class="item" v-for="(item, index) in shebeiData" :key="index">
+                        <div class="item-t">
+                            <div>{{item.name}}</div>
+                            <div>{{item.code}}</div>
+                        </div>
+                        <div class="item-img">
+                            <img v-if="item.image" :src="item.image" />
+                        </div>
+                        <div class="item-info">
+                            <div class="online">设备在线状态: <span :style="{color: item.online ? '#56d12c' : '#bababa'}">{{item.online ? '在线' : '掉线'}}</span></div>
+                            <div class="time">安装时间: <span>{{item.time}}</span></div>
+                            <div class="address">安装位置: <span>{{item.address}}</span></div>
+                        </div>
+                    </div>
+                </div>
+                <div class="list-two list" v-else-if="selectNum === 2">
+                    <div class="item" v-for="(item, index) in shebeiData" :key="index">
+                        <div class="item-t">
+                            <div>{{item.name}}</div>
+                            <div>{{item.code}}</div>
+                        </div>
+                        <div class="item-img">
+                            <img v-if="item.image" :src="item.image" />
+                        </div>
+                        <div class="item-info">
+                            <div class="online">设备在线状态: <span :style="{color: item.online ? '#56d12c' : '#bababa'}">{{item.online ? '在线' : '掉线'}}</span></div>
+                            <div class="time">安装时间: <span>{{item.time}}</span></div>
+                            <div class="address">安装位置: <span>{{item.address}}</span></div>
+                        </div>
+                    </div>
+                </div>
+                <div class="list-one list" v-else-if="selectNum === 1">
+                    <div class="item" v-for="(item, index) in shebeiData" :key="index">
+                        <div class="item-t">
+                            <div>{{item.name}}</div>
+                            <div>{{item.code}}</div>
+                        </div>
+                        <div class="item-img">
+                            <img v-if="item.image" :src="item.image" />
+                        </div>
+                        <div class="item-info">
+                            <div class="online">设备在线状态: <span :style="{color: item.online ? '#56d12c' : '#bababa'}">{{item.online ? '在线' : '掉线'}}</span></div>
+                            <div class="time">安装时间: <span>{{item.time}}</span></div>
+                            <div class="address">安装位置: <span>{{item.address}}</span></div>
+                        </div>
+                    </div>
+                </div>
+                <div class="list-single" v-else></div>
+            </div>
+        </div>
     </div>
 </template>
 
 <style scoped lang="scss">
-
+.shebei{
+    height: 100%;
+    display: flex;
+    &-menu{
+        flex-shrink: 0;
+        width: 20%;
+        height: 100%;
+        padding: 10px 0;
+        background: linear-gradient( 135deg, #91BDDB 0%, #9EC2DB 99%);
+        overflow-y: scroll;
+        &::-webkit-scrollbar {
+            display: none;
+        }
+        .menu-t{
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+            font-size: 26px;
+            color: #fff;
+            background: url("@/assets/images/flow/monitor-title-bg.png") no-repeat;
+            background-size: 100% 100%;
+        }
+        .el-menu{
+            background-color: transparent;
+            border-right: none;
+            :deep(.el-menu){
+                background-color: transparent;
+            }
+            :deep(.el-sub-menu__title:hover) {
+                background-color: rgba(0, 0, 0, 0.06);
+            }
+            :deep(.el-menu-item.is-active) {
+                color: #fff;
+            }
+        }
+    }
+    &-monitor{
+        flex-shrink: 0;
+        width: 80%;
+        height: 100%;
+        background: linear-gradient( 180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 100%);
+        .monitor-tool{
+            width: 100%;
+            height: 60px;
+            padding: 0 30px;
+            background: linear-gradient( 90deg, #91BDDB 0%, #DADFE3 100%);
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            .tool-l{
+                display: flex;
+                align-items: center;
+                gap: 1rem;
+                .name{
+                    font-size: 1.1rem;
+                }
+            }
+            .tool-r{
+                display: flex;
+                align-items: center;
+                img{
+                    width: 25px;
+                    margin-right: 10px;
+                }
+            }
+        }
+        .monitor-box{
+            height: calc(100% - 60px);
+            padding-top: 10px;
+            .list{
+                height: 100%;
+                padding: 0 30px;
+                overflow-y: scroll;
+                &::-webkit-scrollbar {
+                    display: none;
+                }
+                .item{
+                    flex-shrink: 0;
+                    background: rgba(23,108,229,0.3);
+                    border: 1px solid #176CE5;
+                    border-radius: 8px;
+                }
+            }
+            .list-six{
+                display: flex;
+                flex-wrap: wrap;
+                gap: 20px;
+                .item{
+                    width: 32%;
+                    height: 48%;
+                    padding: 10px 20px;
+                    .item-t{
+                        height: 10%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: space-between;
+                        font-size: 28px;
+                        color: #fff;
+                    }
+                    .item-img{
+                        margin-top: 10px;
+                        width: 100%;
+                        height: 68%;
+                        background-color: #000;
+                        img{
+                            width: 100%;
+                            height: 100%;
+                        }
+                    }
+                    .item-info{
+                        height: 18%;
+                        display: flex;
+                        flex-wrap: wrap;
+                        color: #fff;
+                        font-size: 1.2rem;
+                        .online,
+                        .time{
+                            width: 50%;
+                            padding: 6px 0;
+                        }
+                        .address{
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+            .list-two{
+                display: flex;
+                flex-wrap: wrap;
+                gap: 20px;
+                .item{
+                    width: 49%;
+                    height: 99%;
+                    padding: 30px;
+                    .item-t{
+                        height: 10%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: space-between;
+                        font-size: 36px;
+                        color: #fff;
+                    }
+                    .item-img{
+                        margin-top: 10px;
+                        width: 100%;
+                        height: 68%;
+                        background-color: #000;
+                        img{
+                            width: 100%;
+                            height: 100%;
+                        }
+                    }
+                    .item-info{
+                        display: flex;
+                        flex-wrap: wrap;
+                        color: #fff;
+                        font-size: 1.5rem;
+                        .online,
+                        .time{
+                            width: 50%;
+                            padding: 20px 0;
+                        }
+                        .address{
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+            .list-one{
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                .item{
+                    width: 70%;
+                    height: 99%;
+                    padding: 30px;
+                    margin-bottom: 30px;
+                    .item-t{
+                        height: 10%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: space-between;
+                        font-size: 36px;
+                        color: #fff;
+                    }
+                    .item-img{
+                        margin-top: 10px;
+                        width: 100%;
+                        height: 75%;
+                        background-color: #000;
+                        img{
+                            width: 100%;
+                            height: 100%;
+                        }
+                    }
+                    .item-info{
+                        display: flex;
+                        flex-wrap: wrap;
+                        color: #fff;
+                        font-size: 1.5rem;
+                        .online,
+                        .time{
+                            width: 50%;
+                            padding: 20px 0;
+                        }
+                        .address{
+                            width: 100%;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/screen/temperature/statics/index.vue b/src/views/screen/temperature/statics/index.vue
index 63edf7c..f9c8747 100644
--- a/src/views/screen/temperature/statics/index.vue
+++ b/src/views/screen/temperature/statics/index.vue
@@ -1,13 +1,280 @@
 <script setup>
+import {onMounted, ref} from "vue";
+import * as echarts from 'echarts/core';
 
+const wenduType = ref(3)
+const wenduChartRef = ref()
+let wenduCharts = null;
+const wenduTimeValue = ref()
+const shuiweiType = ref(3)
+const shuiweiChartRef = ref()
+let shuiweiCharts = null
+const shuiweiTimeValue = ref()
+
+const handleSelectType = (type) => {
+    if(type === 'wendu') {
+        wenduTimeValue.value = 0
+    } else if (type === 'shuiwei') {
+        shuiweiTimeValue.value = 0
+    }
+}
+
+const initwenduChart = () => {
+    if(wenduChartRef.value) {
+        wenduCharts = echarts.init(wenduChartRef.value);
+        const options = {
+            tooltip: {
+                trigger: 'axis',
+            },
+            grid: {
+                top: 80,
+                left: 60,
+                right: 60,
+                bottom: 60
+            },
+            xAxis: {
+                type: 'category',
+                boundaryGap: false,
+                data: ['设备离线', '水位异常', '流量异常', '流速异常', '其他异常'],
+                axisLabel: {
+                    color: '#fff',
+                    fontSize: '1.2rem'
+                }
+            },
+            yAxis: {
+                type: 'value',
+                name: '℃',
+                nameTextStyle: {
+                    color: '#fff',
+                    fontSize: '1.2rem'
+                },
+                axisLabel: {
+                    color: '#fff',
+                    fontSize: '1.2rem'
+                }
+            },
+            series: [
+                {
+                    data: [36, 44, 38, 24, 63],
+                    type: 'line',
+                    areaStyle: {
+                        color: {
+                            type: 'linear',
+                            x: 0,
+                            y: 0,
+                            x2: 0,
+                            y2: 1,
+                            colorStops: [{
+                                offset: 0, color: '#00FFFF'  // 0% 处的颜色
+                            }, {
+                                offset: 1, color: 'rgba(0,255,255,0.2)' // 100% 处的颜色
+                            }],
+                            global: false // 缺省为 false
+                        }
+                    }
+                }
+            ]
+        }
+        wenduCharts.setOption(options);
+    }
+}
+
+const initshuiweiChart = () => {
+    if(shuiweiChartRef.value) {
+        shuiweiCharts = echarts.init(shuiweiChartRef.value);
+        const options = {
+            tooltip: {
+                trigger: 'axis',
+            },
+            grid: {
+                top: 80,
+                left: 60,
+                right: 60,
+                bottom: 60
+            },
+            xAxis: {
+                type: 'category',
+                data: ['设备离线', '水位异常', '流量异常', '流速异常', '其他异常'],
+                axisLabel: {
+                    color: '#fff',
+                    fontSize: '1.2rem'
+                }
+            },
+            yAxis: {
+                type: 'value',
+                name: 'm',
+                nameTextStyle: {
+                    color: '#fff',
+                    fontSize: '1.2rem'
+                },
+                axisLabel: {
+                    color: '#fff',
+                    fontSize: '1.2rem'
+                }
+            },
+            series: [
+                {
+                    data: [36, 44, 38, 24, 63],
+                    type: 'bar',
+                    itemStyle: {
+                        color: '#BBCFFF'
+                    }
+                }
+            ]
+        }
+        shuiweiCharts.setOption(options);
+    }
+}
+
+onMounted(() => {
+    initwenduChart()
+    initshuiweiChart()
+})
 </script>
 
 <template>
-    <div>
-        汇总统计
+    <div class="statis">
+        <div class="item">
+            <div class="item-t">
+                <div class="name">水温汇总统计</div>
+                <div class="select">
+                    <el-radio-group v-model="wenduType" @change="handleSelectType('wendu')">
+                        <el-radio :value="1">日</el-radio>
+                        <el-radio :value="2">月</el-radio>
+                        <el-radio :value="3">年</el-radio>
+                    </el-radio-group>
+                </div>
+            </div>
+            <div class="charts" ref="wenduChartRef"></div>
+            <div class="title">
+                <el-date-picker
+                    v-if="wenduType === 1"
+                    v-model="wenduTimeValue"
+                    type="date"
+                    placeholder="请选择时间"
+                />
+                <el-date-picker
+                    v-else-if="wenduType === 2"
+                    v-model="wenduTimeValue"
+                    type="month"
+                    placeholder="请选择时间"
+                />
+                <el-date-picker
+                    v-else
+                    v-model="wenduTimeValue"
+                    type="year"
+                    placeholder="请选择时间"
+                />
+                <div>电站平均水温汇总</div>
+            </div>
+        </div>
+        <div class="item">
+            <div class="item-t">
+                <div class="name">水位汇总统计</div>
+                <div class="select">
+                    <el-radio-group v-model="shuiweiType" @change="handleSelectType('shuiwei')">
+                        <el-radio :value="1">日</el-radio>
+                        <el-radio :value="2">月</el-radio>
+                        <el-radio :value="3">年</el-radio>
+                    </el-radio-group>
+                </div>
+            </div>
+            <div class="charts" ref="shuiweiChartRef"></div>
+            <div class="title">
+                <el-date-picker
+                    v-if="wenduType === 1"
+                    v-model="shuiweiTimeValue"
+                    type="date"
+                    placeholder="请选择时间"
+                />
+                <el-date-picker
+                    v-else-if="wenduType === 2"
+                    v-model="shuiweiTimeValue"
+                    type="month"
+                    placeholder="请选择时间"
+                />
+                <el-date-picker
+                    v-else
+                    v-model="shuiweiTimeValue"
+                    type="year"
+                    placeholder="请选择时间"
+                />
+                <div>电站平均水位汇总</div>
+            </div>
+        </div>
     </div>
 </template>
 
 <style scoped lang="scss">
-
+.statis{
+    height: 100%;
+    background: linear-gradient( 180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 100%);
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    gap: 30px;
+    .item{
+        width: 48%;
+        height: 96%;
+        background: rgba(23,108,229,0.3);
+        border: 1px solid #176CE5;
+        border-radius: 8px;
+        .item-t{
+            height: 10%;
+            padding: 0 30px;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            .name{
+                font-size: 36px;
+                color: #fff;
+            }
+            .select{
+                :deep(.el-radio){
+                    color: #fff;
+                }
+                :deep(.el-radio__label){
+                    font-size: 20px;
+                }
+                :deep(.el-radio__input.is-checked+.el-radio__label){
+                    color: #00ff00;
+                }
+                :deep(.el-radio__input.is-checked .el-radio__inner){
+                    background-color: #00ff00;
+                }
+            }
+        }
+        .charts{
+            height: 80%;
+        }
+        .title{
+            height: 10%;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            font-size: 26px;
+            color: #fff;
+            :deep(.el-date-editor){
+                width: 10rem;
+            }
+            :deep(.el-input__wrapper){
+                background-color: transparent;
+                box-shadow: none;
+                border-radius: 0;
+                .el-input__prefix{
+                    color: #fff;
+                    font-size: 1.2rem;
+                }
+                .el-input__inner{
+                    color: #fff;
+                    font-size: 1.2rem;
+                    &::placeholder{
+                        color: #fff;
+                        font-size: 1.2rem;
+                    }
+                }
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index ffb2200..01d2789 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -341,7 +341,7 @@
     getUserType()
     getList();
     </script>
-    <style lang="scss">
+    <style lang="scss" scoped>
     .table-headImg{
         max-width: 100px;
         height: 50px;

--
Gitblit v1.9.3