Browse Source

Merge branch 'master' of http://git.xt.wenhq.top:8083/wenhongquan/qdtlui

# Conflicts:
#	src/components/map/index.vue
wenhongquan 3 years ago
parent
commit
37a52b2e3d

+ 1 - 1
.env.production

@@ -1,5 +1,5 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = 启东市铁路沿线综合治理信息化管理平台
 
 # 生产环境配置
 ENV = 'production'

+ 1 - 1
.env.staging

@@ -1,5 +1,5 @@
 # 页面标题
-VUE_APP_TITLE = 若依管理系统
+VUE_APP_TITLE = 启东市铁路沿线综合治理信息化管理平台
 
 NODE_ENV = production
 

+ 92 - 92
package.json

@@ -1,92 +1,92 @@
-{
-  "name": "ruoyi",
-  "version": "3.8.1",
-  "description": "若依管理系统",
-  "author": "若依",
-  "license": "MIT",
-  "scripts": {
-    "dev": "vue-cli-service serve",
-    "build:prod": "vue-cli-service build",
-    "build:stage": "vue-cli-service build --mode staging",
-    "preview": "node build/index.js --preview",
-    "lint": "eslint --ext .js,.vue src"
-  },
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },
-  "lint-staged": {
-    "src/**/*.{js,vue}": [
-      "eslint --fix",
-      "git add"
-    ]
-  },
-  "keywords": [
-    "vue",
-    "admin",
-    "dashboard",
-    "element-ui",
-    "boilerplate",
-    "admin-template",
-    "management-system"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "https://gitee.com/y_project/RuoYi-Vue.git"
-  },
-  "dependencies": {
-    "@riophae/vue-treeselect": "0.4.0",
-    "axios": "0.24.0",
-    "clipboard": "2.0.8",
-    "core-js": "^3.21.0",
-    "echarts": "4.9.0",
-    "element-ui": "2.15.6",
-    "file-saver": "2.0.5",
-    "fuse.js": "6.4.3",
-    "highlight.js": "9.18.5",
-    "js-beautify": "1.13.0",
-    "js-cookie": "3.0.1",
-    "jsencrypt": "3.2.1",
-    "moment": "^2.29.1",
-    "nprogress": "0.2.0",
-    "ol": "^6.12.0",
-    "quill": "1.3.7",
-    "screenfull": "5.0.2",
-    "sortablejs": "1.10.2",
-    "vue": "2.6.12",
-    "vue-count-to": "1.0.13",
-    "vue-cropper": "0.5.5",
-    "vue-meta": "2.4.0",
-    "vue-router": "3.4.9",
-    "vuedraggable": "2.24.3",
-    "vuex": "3.6.0"
-  },
-  "devDependencies": {
-    "@vue/cli-plugin-babel": "4.4.6",
-    "@vue/cli-plugin-eslint": "4.4.6",
-    "@vue/cli-service": "4.4.6",
-    "babel-eslint": "10.1.0",
-    "babel-plugin-dynamic-import-node": "2.3.3",
-    "chalk": "4.1.0",
-    "compression-webpack-plugin": "5.0.2",
-    "connect": "3.6.6",
-    "eslint": "7.15.0",
-    "eslint-plugin-vue": "7.2.0",
-    "lint-staged": "10.5.3",
-    "runjs": "4.4.2",
-    "sass": "1.32.13",
-    "sass-loader": "10.1.1",
-    "script-ext-html-webpack-plugin": "2.1.5",
-    "svg-sprite-loader": "5.1.1",
-    "vue-template-compiler": "2.6.12"
-  },
-  "engines": {
-    "node": ">=8.9",
-    "npm": ">= 3.0.0"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions"
-  ]
-}
+{
+    "name": "ruoyi",
+    "version": "3.8.1",
+    "description": "启东市铁路沿线综合治理信息化管理平台",
+    "author": "新通",
+    "license": "MIT",
+    "scripts": {
+        "dev": "vue-cli-service serve",
+        "build:prod": "vue-cli-service build",
+        "build:stage": "vue-cli-service build --mode staging",
+        "preview": "node build/index.js --preview",
+        "lint": "eslint --ext .js,.vue src"
+    },
+    "husky": {
+        "hooks": {
+            "pre-commit": "lint-staged"
+        }
+    },
+    "lint-staged": {
+        "src/**/*.{js,vue}": [
+            "eslint --fix",
+            "git add"
+        ]
+    },
+    "keywords": [
+        "vue",
+        "admin",
+        "dashboard",
+        "element-ui",
+        "boilerplate",
+        "admin-template",
+        "management-system"
+    ],
+    "repository": {
+        "type": "git",
+        "url": "https://gitee.com/y_project/RuoYi-Vue.git"
+    },
+    "dependencies": {
+        "@riophae/vue-treeselect": "0.4.0",
+        "axios": "0.24.0",
+        "clipboard": "2.0.8",
+        "core-js": "^3.21.0",
+        "echarts": "4.9.0",
+        "element-ui": "2.15.6",
+        "file-saver": "2.0.5",
+        "fuse.js": "6.4.3",
+        "highlight.js": "9.18.5",
+        "js-beautify": "1.13.0",
+        "js-cookie": "3.0.1",
+        "jsencrypt": "3.2.1",
+        "moment": "^2.29.1",
+        "nprogress": "0.2.0",
+        "ol": "^6.12.0",
+        "quill": "1.3.7",
+        "screenfull": "5.0.2",
+        "sortablejs": "1.10.2",
+        "vue": "2.6.12",
+        "vue-count-to": "1.0.13",
+        "vue-cropper": "0.5.5",
+        "vue-meta": "2.4.0",
+        "vue-router": "3.4.9",
+        "vuedraggable": "2.24.3",
+        "vuex": "3.6.0"
+    },
+    "devDependencies": {
+        "@vue/cli-plugin-babel": "4.4.6",
+        "@vue/cli-plugin-eslint": "4.4.6",
+        "@vue/cli-service": "4.4.6",
+        "babel-eslint": "10.1.0",
+        "babel-plugin-dynamic-import-node": "2.3.3",
+        "chalk": "4.1.0",
+        "compression-webpack-plugin": "5.0.2",
+        "connect": "3.6.6",
+        "eslint": "7.15.0",
+        "eslint-plugin-vue": "7.2.0",
+        "lint-staged": "10.5.3",
+        "runjs": "4.4.2",
+        "sass": "1.32.13",
+        "sass-loader": "10.1.1",
+        "script-ext-html-webpack-plugin": "2.1.5",
+        "svg-sprite-loader": "5.1.1",
+        "vue-template-compiler": "2.6.12"
+    },
+    "engines": {
+        "node": ">=8.9",
+        "npm": ">= 3.0.0"
+    },
+    "browserslist": [
+        "> 1%",
+        "last 2 versions"
+    ]
+}

+ 2 - 2
public/index.html

@@ -6,9 +6,9 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="renderer" content="webkit">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico"> -->
     <title>
-        <%= webpackConfig.name %>
+        启东市铁路沿线综合治理信息化管理平台
     </title>
     <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
     <style>

+ 8 - 2
src/App.vue

@@ -18,10 +18,16 @@ export default  {
 }
 </script>
 
-<style scoped>
-#app{
+<style lang="scss">
+#app {
   background: url("./assets/images/bg@2x.png") no-repeat;
   background-size: 100% 100%;
+}
+.my_table{
+  color: #fff !important;
+  th {
+    color:#fff !important;
 
+  }
 }
 </style>

BIN
src/assets/images/icons/station.png


BIN
src/assets/images/icons/station@2x.png


BIN
src/assets/images/icons/宁启铁路二期.png


BIN
src/assets/images/icons/宁启铁路二期@2x.png


BIN
src/assets/images/icons/洋吕铁路在建.png


BIN
src/assets/images/icons/洋吕铁路在建@2x.png


+ 410 - 380
src/assets/styles/ruoyi.scss

@@ -1,380 +1,410 @@
- /**
- * 通用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-dialog:not(.is-fullscreen) {
-	margin-top: 6vh !important;
-}
-
-.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body {
-    overflow: auto;
-	overflow-x: hidden;
-	max-height: 70vh;
-	padding: 10px 20px 0;
-}
-
-.el-table {
-	.el-table__header-wrapper, .el-table__fixed-header-wrapper {
-		th {
-			word-break: break-word;
-			background-color: #f8f8f9;
-			color: #515a6e;
-			height: 40px;
-			font-size: 13px;
-		}
-	}
-	.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;
-}
-
-/* tree border */
-.tree-border {
-    margin-top: 5px;
-    border: 1px solid #e5e6e7;
-    background: #FFFFFF none;
-    border-radius:4px;
-}
-
-.pagination-container .el-pagination {
-	right: 0;
-	position: absolute;
-	color:#3DFFEA 
-}
-
-@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--mini {
-	padding-left: 0;
-	padding-right: 0;
-	width: inherit;
-}
-
-/** 表格更多操作下拉样式 */
-.el-table .el-dropdown-link {
-	cursor: pointer;
-	color: #409EFF;
-	margin-left: 5px;
-}
-
-.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;
-	min-height: 40px;
-}
-
-.el-card__body {
-	padding: 15px 20px 20px 20px;
-}
-
-.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 {
-	position: relative;
-	float: right;
-}
-
-.el-button--primary {
-	color:#C5D0D4;
-	background:#0A4559 !important;
-	border-color:#0A4559 !important;
-}
-
-.el-button--primary:hover {
-background: #3DFFEA !important;
-border-color: #3DFFEA !important;
-color: #000000 !important;
-}
-
-.el-pagination__total{
-	color:#3DFFEA
-}
-
-.el-pagination__jump{
-	color:#3DFFEA
-}       
-
-.el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next, .el-pagination.is-background .el-pager li {   
-		background: #068583 20%;
-		color: #0BC4F0;
-}
-
-.el-pagination.is-background .el-pager li:not(.disabled).active {
-		background-color: #3DFFEA;
-		color: #031B3C;
-}
-
-.el-input__inner{
-	background: #068583 20%;
-	border: 1px solid #068583;
-	color:white
-}
-
-.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{
-	 background: transparent;
-	 border: none;
-	 color: #C5D0D4;
-}
-
-.el-table .el-table__body tr.el-table__row td.el-table__cell{
-	 background: transparent;
-	 border: none;
-	 color: #C5D0D4;
-}
-
-.el-table .warning-row {
-	background:#052C3E 20%;
-}
-
-.el-table .success-row {
-	background: #041621;
-}
-
-.el-checkbox__inner{
-	background: transparent
-}
-
-/* td{
-	border: none;
-	color: #C5D0D4;
-} */
-.el-table::before {
-	height: 0px;
-}
-
-.el-dialog__header{
-	 background: #026F70;
-	 color:#ffffff;
-	 font-size: 1.6rem;
-	 height:4.8rem;
-	 padding-top:1.5rem;
-	 padding-left:2.3rem
-}
-
-.el-dialog__title{
-	 color:#ffffff;
-	 font-size: 1.6rem
-}
-
-.el-dialog__body{
-	background: #041824 84%
-}
-
-.el-dialog__footer{
-	background: #041824 84%
-}
-
-.el-input__inner{
-   background: #041824 84%
-}
-
-.el-textarea__inner{
-	background: #041824 84%
-}
-
-.el-form-item__label{
-	 color:#C5D0D4
-}
-
-.el-icon-arrow-up:before{
-	 color:#23FFFC
-}
+ /**
+ * 通用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-dialog:not(.is-fullscreen) {
+     margin-top: 6vh !important;
+ }
+
+ .el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body {
+     overflow: auto;
+     overflow-x: hidden;
+     max-height: 70vh;
+     padding: 10px 20px 0;
+ }
+
+ .el-table {
+     .el-table__header-wrapper,
+     .el-table__fixed-header-wrapper {
+         th {
+             word-break: break-word;
+             background-color: #f8f8f9;
+             color: #515a6e;
+             height: 40px;
+             font-size: 13px;
+         }
+     }
+     .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;
+ }
+ /* tree border */
+
+ .tree-border {
+     margin-top: 5px;
+     border: 1px solid #e5e6e7;
+     background: #FFFFFF none;
+     border-radius: 4px;
+ }
+
+ .pagination-container .el-pagination {
+     right: 0;
+     position: absolute;
+     color: #3DFFEA
+ }
+
+ @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--mini {
+     padding-left: 0;
+     padding-right: 0;
+     width: inherit;
+ }
+ /** 表格更多操作下拉样式 */
+
+ .el-table .el-dropdown-link {
+     cursor: pointer;
+     color: #409EFF;
+     margin-left: 5px;
+ }
+
+ .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;
+     min-height: 40px;
+ }
+
+ .el-card__body {
+     padding: 15px 20px 20px 20px;
+ }
+
+ .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 {
+     position: relative;
+     float: right;
+ }
+
+ .el-button--primary {
+     color: #C5D0D4;
+     background: #0A4559 !important;
+     border-color: #0A4559 !important;
+ }
+
+ .el-button--primary:hover {
+     background: #3DFFEA !important;
+     border-color: #3DFFEA !important;
+     color: #000000 !important;
+ }
+
+ .el-pagination__total {
+     color: #3DFFEA
+ }
+
+ .el-pagination__jump {
+     color: #3DFFEA
+ }
+
+ .el-pagination.is-background .btn-prev,
+ .el-pagination.is-background .btn-next,
+ .el-pagination.is-background .el-pager li {
+     background: #068583 20%;
+     color: #0BC4F0;
+ }
+
+ .el-pagination.is-background .el-pager li:not(.disabled).active {
+     background-color: #3DFFEA;
+     color: #031B3C;
+ }
+
+ .el-input__inner {
+     background: #068583 20%;
+     border: 1px solid #068583;
+     color: white
+ }
+
+ .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell {
+     background: transparent;
+     border: none;
+     //  color: #C5D0D4;
+ }
+
+ .el-table .el-table__body tr.el-table__row td.el-table__cell {
+     background: transparent;
+     border: none;
+     //  color: #C5D0D4;
+ }
+
+ .el-table .warning-row {
+     background: #052C3E 20%;
+ }
+
+ .el-table .success-row {
+     background: #041621;
+ }
+
+ .el-checkbox__inner {
+     background: transparent
+ }
+ /* td{
+	border: none;
+	color: #C5D0D4;
+} */
+
+ .el-table::before {
+     height: 0px;
+ }
+
+ .el-dialog__header {
+     background: #026F70;
+     color: #ffffff;
+     font-size: 1.6rem;
+     height: 4.8rem;
+     padding-top: 1.5rem;
+     padding-left: 2.3rem
+ }
+
+ .el-dialog__title {
+     color: #ffffff;
+     font-size: 1.6rem
+ }
+
+ .el-dialog__body {
+     background: #041824 84%
+ }
+
+ .el-dialog__footer {
+     background: #041824 84%
+ }
+
+ .el-input__inner {
+     background: #041824 84%
+ }
+
+ .el-textarea__inner {
+     background: #041824 84%
+ }
+
+ .el-form-item__label {
+     color: #C5D0D4
+ }
+
+ .el-icon-arrow-up:before {
+     color: #23FFFC
+ }

+ 8 - 4
src/components/HeaderDiv/index.vue

@@ -7,10 +7,11 @@
             <div :class='currentindex==1?"active":""' @click="goTarget(1)">首页</div>
             <div :class='currentindex==7?"active":""' @click="goTarget(7)">交通局简介</div>
             <div :class='currentindex==2?"active":""' @click="goTarget(2)">设施监测</div>
+             <div :class='currentindex==6?"active":""' @click="goTarget(6)">综合管理</div>
             <div :class='currentindex==3?"active":""' @click="goTarget(3)">治理态势</div>
             <div :class='currentindex==4?"active":""' @click="goTarget(4)">安全态势</div>
             <div :class='currentindex==5?"active":""' @click="goTarget(5)">公众服务</div>
-            <div :class='currentindex==6?"active":""' @click="goTarget(6)">综合管理</div>
+
         </div>
         <div class="time">
             <img src="../../assets/images/图层 9@2x.png" /><span>{{ currenttime }}</span>
@@ -80,7 +81,7 @@ export default {
         color: #fff;
         position: absolute;
         top: 1.2rem;
-        left: 63rem;
+        left: 30%;
         >div {
             display: inline-block;
             margin-right: 7.9rem;
@@ -139,9 +140,12 @@ export default {
   color:#fff;
   font-size:1.6rem;
 
+  .item:hover{
+    cursor: pointer;
+  }
 
   .item{
-    width: 27%;
+    width: 33%;
     text-align: center;
     justify-content: center;
     position: relative;
@@ -151,7 +155,7 @@ export default {
     }
   }
    .item1{
-    width: 23%;
+    width: 33%;
   }
   .item2::after{
     content: "";

+ 134 - 32
src/components/map/index.vue

@@ -204,6 +204,7 @@ export default {
     this.initPoint();
     // this.getTrain(),
     this.getLineList();
+    this.addQdStation();
     window.videosize = "1x1";
     // this.addpoint(point);
     var that = this
@@ -360,6 +361,14 @@ export default {
     // })
   },
   methods: {
+     addQdStation(){
+            var station = [121.67994923828125,31.85240474572754]
+            this.addMarkerQd(station,'station.png',0.6,'marker');
+            var nqLine = [121.57008595703125,31.875750692993165]
+            this.addMarker(nqLine,'宁启铁路二期.png',1,'marker');
+            var ylLine = [121.54948659179688,32.08243099084473]
+            this.addMarker(ylLine,'洋吕铁路在建.png',1,'marker');
+     },
      locationDelete(data){
         for(var index in this.lineLocations){
              if(this.lineLocations[index].locationId == data.locationId){
@@ -422,14 +431,14 @@ export default {
                     this.addPoints(selectLocation,'location2.png',0.6,'selected');
                })
          },
-       addText(location) {
-            var textInfo = new Overlay({
-                position: fromLonLat(location),
-                offset: [20, -20],
-                element: document.getElementById("textInfo")
-            });
-            this.map.addOverlay(textInfo);
-        },
+      //  addText(location) {
+      //       var textInfo = new Overlay({
+      //           position: fromLonLat(location),
+      //           offset: [20, -20],
+      //           element: document.getElementById("textInfo")
+      //       });
+      //       this.map.addOverlay(textInfo);
+      //   },
          getTrain(){
            var trainArry = [[121.645366,31.856052],[121.636002,32.02354],[121.530258,32.086391]];
            for(var index in trainArry){
@@ -626,8 +635,35 @@ export default {
          this.map.removeLayer(layers);
 
       },
-      addMarker(lnglats,icon,size,id,data,type) {
-
+       addMarker(lnglats,icon,size) {
+            let tamarker = new Feature({
+                tadata: {
+                    sectionId: "point",
+                    towerNumber: 22,
+                }, //这里是用来传值用的,在接下来的一章里(事件)中我会讲到。
+                geometry: new Point(lnglats) //这里是点坐标的位置,这里要注意fromLonLat
+            });
+            tamarker.setStyle(
+                new Style({
+                    image: new Icon({
+                        color: "#eee",
+                        crossOrigin: "anonymous",
+                        src: require("../../assets/images/icons/" + icon), //本地的样式
+                        scale:size
+                    }),
+                },
+                )
+            ); //这里是样式
+            var markerta = new LayerVec({
+                source: new SourceVec({
+                    features: [tamarker] //这里放的就是之前的那个点,如果要放置多个点直接push到这里面就行了
+                }),
+                zIndex:30
+            });
+            // this.pointArry[id]=markerta;
+            this.map.addLayer(markerta); //这里是执行,执行之后点就出来了
+      },
+      addMarkerQd(lnglats,icon,size,id,data,type) {
             let tamarker = new Feature({
                 tadata: {
                     sectionId: "point",
@@ -645,7 +681,30 @@ export default {
                         src: require("../../assets/images/icons/" + icon), //本地的样式
                         scale:size
                     }),
-                },)
+                      text: new Text({
+                        text: '启东站',
+                        font: '16px sans-serif',
+                        textAlign: "center",
+                        textBaseline: "middle",
+                        //font: 'verdana',
+                        fill: new Fill({
+                          color: "blue"
+                        }),
+                        backgroundFill: new Fill({
+                          color: "rgba(220,38,38,0.2)"
+                        }),
+                         stroke: new Stroke({
+                          color: "#ffffff"
+                          // width: 3
+                        }),
+                        // font: "10px sans-serif",
+                        // offsetX: parseInt(0, 10),
+                        offsetY: 25,
+                        placement: "point", //point 则自动计算面的中心k点然后标注  line 则根据面要素的边进行标注
+                        overflow: false //超出面的部分不显示
+                    })
+                },
+                )
             ); //这里是样式
             var markerta = new LayerVec({
                 source: new SourceVec({
@@ -656,6 +715,50 @@ export default {
             this.pointArry[id]=markerta;
             this.map.addLayer(markerta); //这里是执行,执行之后点就出来了
       },
+       addText(lnglats,text,color,background) {
+            let tamarker = new Feature({
+                tadata: {
+                    sectionId: "point",
+                    towerNumber: 22,
+                }, //这里是用来传值用的,在接下来的一章里(事件)中我会讲到。
+                geometry: new Point(lnglats) //这里是点坐标的位置,这里要注意fromLonLat
+            });
+            tamarker.setStyle(
+                new Style({
+                      text: new Text({
+                        text: text,
+                        font: '16px sans-serif',
+                        textAlign: "center",
+                        textBaseline: "middle",
+                        //font: 'verdana',
+                        fill: new Fill({
+                          color: color
+                        }),
+                        backgroundFill: new Fill({
+                          color: background
+                        }),
+                         stroke: new Stroke({
+                          color: "#ffffff"
+                          // width: 3
+                        }),
+                        // font: "10px sans-serif",
+                        // offsetX: parseInt(0, 10),
+                        offsetY: 25,
+                        placement: "point", //point 则自动计算面的中心k点然后标注  line 则根据面要素的边进行标注
+                        overflow: false //超出面的部分不显示
+                    })
+                },
+                )
+            ); //这里是样式
+            var markerta = new LayerVec({
+                source: new SourceVec({
+                    features: [tamarker] //这里放的就是之前的那个点,如果要放置多个点直接push到这里面就行了
+                }),
+                zIndex:30
+            });
+            // this.pointArry[id]=markerta;
+            this.map.addLayer(markerta); //这里是执行,执行之后点就出来了
+      },
       addPoints(data,icon,size,type){
 
 
@@ -756,10 +859,11 @@ export default {
               if(type == 'device'){
                  this.deviceList.push(linevectorLayer);
                  linevectorLayer.setVisible(false)
-            }else{
-               this.mapHashMap[type]=linevectorLayer;
-               linevectorLayer.setVisible(false)
             }
+            // else{
+            //    this.mapHashMap[type]=linevectorLayer;
+            //    linevectorLayer.setVisible(false)
+            // }
             this.map.addLayer(linevectorLayer); //这里是执行,执行之后点就出来了
         },
          addPolygon(item) {
@@ -873,25 +977,23 @@ export default {
                       ]
           }else if(type == 'nqtl2'){
                style =[
-                     new Style({
-                          stroke: new Stroke({
-                              color:"#000000",
-                              width:6,
-                              lineDash:[15,45],
-                              lineCap:"butt"
-                          }),
-                          zIndex:20
-                      }),
-                      new Style({
-                          stroke: new Stroke({
-                              color:"#ffffff",
-                              width:6,
-                              lineDash:[15,45],
-                              lineDashOffset:30,
-                              lineCap:"butt"
+                    new Style({
+                              stroke: new Stroke({
+                                  color:"#535353",
+                                  width:6,
+                                  lineCap:"butt"
+                              }),
+                              zIndex:20
                           }),
-                          zIndex:21
-                      })
+                          new Style({
+                              stroke: new Stroke({
+                                  color:"#ffffff",
+                                  width:6,
+                                  lineDash:[15,15],
+                                  lineCap:"butt"
+                              }),
+                              zIndex:21
+                          })
                     ]
           }else if(type == 'device'){
                style =new Style({

+ 93 - 93
src/layout/components/Sidebar/Logo.vue

@@ -1,93 +1,93 @@
-<template>
-  <div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
-    <transition name="sidebarLogoFade">
-      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
-        <img v-if="logo" :src="logo" class="sidebar-logo" />
-        <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
-      </router-link>
-      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
-        <img v-if="logo" :src="logo" class="sidebar-logo" />
-        <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
-      </router-link>
-    </transition>
-  </div>
-</template>
-
-<script>
-import logoImg from '@/assets/logo/logo.png'
-import variables from '@/assets/styles/variables.scss'
-
-export default {
-  name: 'SidebarLogo',
-  props: {
-    collapse: {
-      type: Boolean,
-      required: true
-    }
-  },
-  computed: {
-    variables() {
-      return variables;
-    },
-    sideTheme() {
-      return this.$store.state.settings.sideTheme
-    }
-  },
-  data() {
-    return {
-      title: '若依管理系统',
-      logo: logoImg
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.sidebarLogoFade-enter-active {
-  transition: opacity 1.5s;
-}
-
-.sidebarLogoFade-enter,
-.sidebarLogoFade-leave-to {
-  opacity: 0;
-}
-
-.sidebar-logo-container {
-  position: relative;
-  width: 100%;
-  height: 50px;
-  line-height: 50px;
-  background: #2b2f3a;
-  text-align: center;
-  overflow: hidden;
-
-  & .sidebar-logo-link {
-    height: 100%;
-    width: 100%;
-
-    & .sidebar-logo {
-      width: 32px;
-      height: 32px;
-      vertical-align: middle;
-      margin-right: 12px;
-    }
-
-    & .sidebar-title {
-      display: inline-block;
-      margin: 0;
-      color: #fff;
-      font-weight: 600;
-      line-height: 50px;
-      font-size: 14px;
-      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
-      vertical-align: middle;
-    }
-  }
-
-  &.collapse {
-    .sidebar-logo {
-      margin-right: 0px;
-    }
-  }
-}
-</style>
+<template>
+  <div class="sidebar-logo-container" :class="{'collapse':collapse}" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
+    <transition name="sidebarLogoFade">
+      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
+        <img v-if="logo" :src="logo" class="sidebar-logo" />
+        <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
+      </router-link>
+      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
+        <img v-if="logo" :src="logo" class="sidebar-logo" />
+        <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
+      </router-link>
+    </transition>
+  </div>
+</template>
+
+<script>
+import logoImg from '@/assets/logo/logo.png'
+import variables from '@/assets/styles/variables.scss'
+
+export default {
+  name: 'SidebarLogo',
+  props: {
+    collapse: {
+      type: Boolean,
+      required: true
+    }
+  },
+  computed: {
+    variables() {
+      return variables;
+    },
+    sideTheme() {
+      return this.$store.state.settings.sideTheme
+    }
+  },
+  data() {
+    return {
+      title: '启东市铁路沿线综合治理信息化管理平台',
+      logo: logoImg
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.sidebarLogoFade-enter-active {
+  transition: opacity 1.5s;
+}
+
+.sidebarLogoFade-enter,
+.sidebarLogoFade-leave-to {
+  opacity: 0;
+}
+
+.sidebar-logo-container {
+  position: relative;
+  width: 100%;
+  height: 50px;
+  line-height: 50px;
+  background: #2b2f3a;
+  text-align: center;
+  overflow: hidden;
+
+  & .sidebar-logo-link {
+    height: 100%;
+    width: 100%;
+
+    & .sidebar-logo {
+      width: 32px;
+      height: 32px;
+      vertical-align: middle;
+      margin-right: 12px;
+    }
+
+    & .sidebar-title {
+      display: inline-block;
+      margin: 0;
+      color: #fff;
+      font-weight: 600;
+      line-height: 50px;
+      font-size: 14px;
+      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
+      vertical-align: middle;
+    }
+  }
+
+  &.collapse {
+    .sidebar-logo {
+      margin-right: 0px;
+    }
+  }
+}
+</style>

+ 120 - 123
src/utils/request.js

@@ -12,54 +12,54 @@ let downloadLoadingInstance;
 let isReloginShow;
 
 axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
-// 创建axios实例
+    // 创建axios实例
 const service = axios.create({
-  // axios中请求配置有baseURL选项,表示请求URL公共部分
-  baseURL: process.env.VUE_APP_BASE_API,
-  // 超时
-  timeout: 10000
+    // axios中请求配置有baseURL选项,表示请求URL公共部分
+    baseURL: process.env.VUE_APP_BASE_API,
+    // 超时
+    timeout: 10000
 })
 
 // request拦截器
 service.interceptors.request.use(config => {
-  // 是否需要设置 token
-  const isToken = (config.headers || {}).isToken === false
-  // 是否需要防止数据重复提交
-  const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
-  if (getToken() && !isToken) {
-    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
-  }
-  // get请求映射params参数
-  if (config.method === 'get' && config.params) {
-    let url = config.url + '?' + tansParams(config.params);
-    url = url.slice(0, -1);
-    config.params = {};
-    config.url = url;
-  }
-  if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
-    const requestObj = {
-      url: config.url,
-      data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
-      time: new Date().getTime()
+    // 是否需要设置 token
+    const isToken = (config.headers || {}).isToken === false
+        // 是否需要防止数据重复提交
+    const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
+    if (getToken() && !isToken) {
+        config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
     }
-    const sessionObj = cache.session.getJSON('sessionObj')
-    if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
-      cache.session.setJSON('sessionObj', requestObj)
-    } else {
-      const s_url = sessionObj.url;                  // 请求地址
-      const s_data = sessionObj.data;                // 请求数据
-      const s_time = sessionObj.time;                // 请求时间
-      const interval = 1000;                         // 间隔时间(ms),小于此时间视为重复提交
-      if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
-        const message = '数据正在处理,请勿重复提交';
-        console.warn(`[${s_url}]: ` + message)
-        return Promise.reject(new Error(message))
-      } else {
-        cache.session.setJSON('sessionObj', requestObj)
-      }
+    // get请求映射params参数
+    if (config.method === 'get' && config.params) {
+        let url = config.url + '?' + tansParams(config.params);
+        url = url.slice(0, -1);
+        config.params = {};
+        config.url = url;
     }
-  }
-  return config
+    if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
+        const requestObj = {
+            url: config.url,
+            data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
+            time: new Date().getTime()
+        }
+        const sessionObj = cache.session.getJSON('sessionObj')
+        if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
+            cache.session.setJSON('sessionObj', requestObj)
+        } else {
+            const s_url = sessionObj.url; // 请求地址
+            const s_data = sessionObj.data; // 请求数据
+            const s_time = sessionObj.time; // 请求时间
+            const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
+            if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
+                // const message = '数据正在处理,请勿重复提交';
+                console.warn(`[${s_url}]: ` + message)
+                return Promise.reject(new Error(message))
+            } else {
+                cache.session.setJSON('sessionObj', requestObj)
+            }
+        }
+    }
+    return config
 }, error => {
     console.log(error)
     Promise.reject(error)
@@ -67,95 +67,92 @@ service.interceptors.request.use(config => {
 
 // 响应拦截器
 service.interceptors.response.use(res => {
-    // 未设置状态码则默认成功状态
-    const code = res.data.code || 200;
-    // 获取错误信息
-    const msg = errorCode[code] || res.data.msg || errorCode['default']
-    // 二进制数据则直接返回
-    if(res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer'){
-      return res.data
-    }
-    if (code === 401) {
-      if (!isReloginShow) {
-        isReloginShow = true;
-        MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
-          confirmButtonText: '重新登录',
-          cancelButtonText: '取消',
-          type: 'warning'
+        // 未设置状态码则默认成功状态
+        const code = res.data.code || 200;
+        // 获取错误信息
+        const msg = errorCode[code] || res.data.msg || errorCode['default']
+            // 二进制数据则直接返回
+        if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
+            return res.data
         }
-      ).then(() => {
-        isReloginShow = false;
-        store.dispatch('LogOut').then(() => {
-          // 如果是登录页面不需要重新加载
-          if (window.location.hash.indexOf("#/login") != 0) {
-            location.href = '/index';
-          }
+        if (code === 401) {
+            if (!isReloginShow) {
+                isReloginShow = true;
+                MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
+                    confirmButtonText: '重新登录',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    isReloginShow = false;
+                    store.dispatch('LogOut').then(() => {
+                        // 如果是登录页面不需要重新加载
+                        if (window.location.hash.indexOf("#/login") != 0) {
+                            location.href = '/index';
+                        }
+                    })
+                }).catch(() => {
+                    isReloginShow = false;
+                });
+            }
+            return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+        } else if (code === 500) {
+            Message({
+                message: msg,
+                type: 'error'
+            })
+            return Promise.reject(new Error(msg))
+        } else if (code !== 200) {
+            Notification.error({
+                title: msg
+            })
+            return Promise.reject('error')
+        } else {
+            return res.data
+        }
+    },
+    error => {
+        console.log('err' + error)
+        let { message } = error;
+        if (message == "Network Error") {
+            message = "后端接口连接异常";
+        } else if (message.includes("timeout")) {
+            message = "系统接口请求超时";
+        } else if (message.includes("Request failed with status code")) {
+            message = "系统接口" + message.substr(message.length - 3) + "异常";
+        }
+        Message({
+            message: message,
+            type: 'error',
+            duration: 5 * 1000
         })
-      }).catch(() => {
-        isReloginShow = false;
-      });
-    }
-      return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
-    } else if (code === 500) {
-      Message({
-        message: msg,
-        type: 'error'
-      })
-      return Promise.reject(new Error(msg))
-    } else if (code !== 200) {
-      Notification.error({
-        title: msg
-      })
-      return Promise.reject('error')
-    } else {
-      return res.data
+        return Promise.reject(error)
     }
-  },
-  error => {
-    console.log('err' + error)
-    let { message } = error;
-    if (message == "Network Error") {
-      message = "后端接口连接异常";
-    }
-    else if (message.includes("timeout")) {
-      message = "系统接口请求超时";
-    }
-    else if (message.includes("Request failed with status code")) {
-      message = "系统接口" + message.substr(message.length - 3) + "异常";
-    }
-    Message({
-      message: message,
-      type: 'error',
-      duration: 5 * 1000
-    })
-    return Promise.reject(error)
-  }
 )
 
 // 通用下载方法
 export function download(url, params, filename) {
-  downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
-  return service.post(url, params, {
-    transformRequest: [(params) => { return tansParams(params) }],
-    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
-    responseType: 'blob'
-  }).then(async (data) => {
-    const isLogin = await blobValidate(data);
-    if (isLogin) {
-      const blob = new Blob([data])
-      saveAs(blob, filename)
-    } else {
-      const resText = await data.text();
-      const rspObj = JSON.parse(resText);
-      const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
-      Message.error(errMsg);
-    }
-    downloadLoadingInstance.close();
-  }).catch((r) => {
-    console.error(r)
-    Message.error('下载文件出现错误,请联系管理员!')
-    downloadLoadingInstance.close();
-  })
+    downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
+    return service.post(url, params, {
+        transformRequest: [(params) => { return tansParams(params) }],
+        headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+        responseType: 'blob'
+    }).then(async(data) => {
+        const isLogin = await blobValidate(data);
+        if (isLogin) {
+            const blob = new Blob([data])
+            saveAs(blob, filename)
+        } else {
+            const resText = await data.text();
+            const rspObj = JSON.parse(resText);
+            const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
+            Message.error(errMsg);
+        }
+        downloadLoadingInstance.close();
+    }).catch((r) => {
+        console.error(r)
+        Message.error('下载文件出现错误,请联系管理员!')
+        downloadLoadingInstance.close();
+    })
 }
 
 export default service

+ 10 - 8
src/views/bigscreen/index.vue

@@ -10,8 +10,8 @@
     <div class="bottombg">
       <div class="item item2" @click="changeMapTab(1)"><div class="num">1123</div><div>静态资源</div></div>
       <div class="item item1 item2" @click="changeMapTab(2)"><div class="num">113</div><div>动态资源</div></div>
-      <div class="item item1 item2" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
-      <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div>
+      <div class="item item1 " @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
+      <!-- <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div> -->
     </div>
 
     <!-- <videodiv :cameracode="ccode" style="width:700px;height:300px;position:absolute;top:100px;left:100px"></videodiv> -->
@@ -68,7 +68,7 @@ export default {
             this.$refs.mapdiv.iconSelect = index
         },
          getTrain(){
-                  this.$refs.mapdiv.addPoint('video.png');            
+                  this.$refs.mapdiv.addPoint('video.png');
          },
          getResource(){
                getResource({date:'2022-03-12'}).then(response =>{
@@ -95,7 +95,7 @@ export default {
                              bridgeArry.push(obj);
                          }else if(obj.areaType == '4'){
                              obj.name = obj.areaName
-                             railArry.push(obj);   
+                             railArry.push(obj);
                          }
                      }
                      for(var index in areaList){
@@ -132,7 +132,7 @@ export default {
                         var json = JSON.parse(data.data);
                          this.$refs.mapdiv.addPoints(json.data.list,'video.png',0.6,'video');
                   });
-              
+
          }
 
     }
@@ -156,9 +156,11 @@ export default {
   color:#fff;
   font-size:1.6rem;
 
-
+.item:hover{
+  cursor: pointer;
+}
   .item{
-    width: 27%;
+    width: 33%;
     text-align: center;
     justify-content: center;
     position: relative;
@@ -168,7 +170,7 @@ export default {
     }
   }
    .item1{
-    width: 23%;
+    width: 33%;
   }
   .item2::after{
     content: "";

+ 6 - 5
src/views/bigscreen/introduction.vue

@@ -121,7 +121,7 @@
                                   </div>
                             </div>
                       </div>
-             
+
                 <div style='font-size: 1.8rem;
                             font-family: Microsoft YaHei;
                             font-weight: 400;
@@ -142,7 +142,7 @@ export default {
   name: "Introduction",
   data() {
     return {
-       
+
     };
   },
    components:{
@@ -152,13 +152,14 @@ export default {
 
   },
   methods: {
-   
+
   }
 };
 </script>
 
 
-<style>
+<style scoped>
+
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -166,7 +167,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 .divcontent{
         background: url("~@/assets/images/home_icon/background.png") no-repeat;

+ 15 - 15
src/views/governance/index.vue

@@ -41,7 +41,7 @@
            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">视频资源统计</div>
         </div>
 
-        <div id='videoeChart' style="width:45rem;height:25rem">
+        <div id='videoeChart' style="width:45rem;height:25rem;margin-top: 6rem;">
         </div>
 
         <div class="divtitle" style="margin-top:1.5rem">
@@ -56,10 +56,10 @@
 
   </div>
 
-  <div style="width:50%;height:90rem">
+  <div style="width:50%;height:100vh">
       <mapdiv ref="mapdiv" style=""></mapdiv>
   </div>
-  
+
   <div style="width:25%;height:100%;">
         <div style="width:100%;padding-left:1rem">
         <div class="divtitle" style="margin-top:1.5rem">
@@ -76,7 +76,7 @@
            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">里程数统计</div>
         </div>
 
-         <div id='lcChart' style="width:45rem;height:25rem"></div>
+         <div id='lcChart' style="width:45rem;height:25rem;margin-top:10rem"></div>
 
         <div class="divtitle" style="margin-top:1.5rem">
            <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
@@ -92,7 +92,7 @@
                         <el-table-column type="index" label="序号" width="55" align="center" />
                         <el-table-column label="巡检员" align="center" prop="nickName" />
                         <el-table-column label="巡检次数" align="center" prop="checkCount" />
-                        <el-table-column label="综合分数" align="center" prop="score" />          
+                        <el-table-column label="综合分数" align="center" prop="score" />
               </el-table>
           </div>
         </div>
@@ -102,8 +102,8 @@
     <div class="bottombg">
       <div class="item item2" @click="changeMapTab(1)"><div class="num">1123</div><div>静态资源</div></div>
       <div class="item item1 item2" @click="changeMapTab(2)"><div class="num">113</div><div>动态资源</div></div>
-      <div class="item item1 item2" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
-      <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div>
+      <div class="item item1" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
+      <!-- <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div> -->
     </div>
 
     <!-- <videodiv :cameracode="ccode" style="width:700px;height:300px;position:absolute;top:100px;left:100px"></videodiv> -->
@@ -155,7 +155,7 @@ export default {
     methods:{
         tableRowClassName({ row, rowIndex }) {
                 if ((rowIndex + 1) % 2 === 0) {
-                    return "warning-row"; 
+                    return "warning-row";
                 } else {
                     return "success-row";
                 }
@@ -178,7 +178,7 @@ export default {
                                this.videoChartDate.count.push(data.data.cameraslist[index].num);
                        }
                         this.initchart();
-                })  
+                })
         },
         initchart(){
                 var myChart = this.$echarts.init(document.getElementById('videoeChart'));
@@ -227,7 +227,7 @@ export default {
                                                                 color: "#006691"
                                                                 }
                                         },
-                                        
+
                                 },
                                 series: [
                                         {
@@ -316,8 +316,8 @@ export default {
                                         2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3
                                 ],
                                 itemStyle: {
-                                                normal: {         
-                                                //由上到下的渐变           
+                                                normal: {
+                                                //由上到下的渐变
                                                 color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
                                                         offset: 0,
                                                         color: '#0068DC'
@@ -365,7 +365,7 @@ export default {
                              bridgeArry.push(obj);
                          }else if(obj.areaType == '4'){
                              obj.name = obj.areaName
-                             railArry.push(obj);   
+                             railArry.push(obj);
                          }
                      }
                      for(var index in areaList){
@@ -400,13 +400,13 @@ export default {
                         var json = JSON.parse(data.data);
                          this.$refs.mapdiv.addPoints(json.data.list,'video.png',0.6,'video');
                   });
-              
+
          }
     }
 };
 </script>
 
-<style rel="stylesheet/scss" lang="scss">
+<style rel="stylesheet/scss" lang="scss" scoped>
  .divtitle{
           background: url("~@/assets/images/title@2x.png") no-repeat;
           background-size: 100% 100%;

+ 827 - 827
src/views/index.vue

@@ -1,827 +1,827 @@
-<template>
-  <div class="app-container home">
-    <!-- <el-row :gutter="20">
-      <el-col :sm="24" :lg="24">
-        <blockquote class="text-warning" style="font-size: 14px">
-          领取阿里云通用云产品1888优惠券
-          <br />
-          <el-link
-            href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
-            type="primary"
-            target="_blank"
-            >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link
-          >
-          <br />
-          领取腾讯云通用云产品2860优惠券
-          <br />
-          <el-link
-            href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
-            type="primary"
-            target="_blank"
-            >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link
-          >
-          <br />
-          阿里云服务器折扣区
-          <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"
-            >>☛☛点我进入☚☚</el-link
-          >
-          &nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区
-          <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"
-            >>☛☛点我进入☚☚</el-link
-          ><br />
-          <h4 class="text-danger">
-            云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
-          </h4>
-        </blockquote>
-
-        <hr />
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :sm="24" :lg="12" style="padding-left: 20px">
-        <h2>若依后台管理框架</h2>
-        <p>
-          一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统。,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
-        </p>
-        <p>
-          <b>当前版本:</b> <span>v{{ version }}</span>
-        </p>
-        <p>
-          <el-tag type="danger">&yen;免费开源</el-tag>
-        </p>
-        <p>
-          <el-button
-            type="primary"
-            size="mini"
-            icon="el-icon-cloudy"
-            plain
-            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
-            >访问码云</el-button
-          >
-          <el-button
-            size="mini"
-            icon="el-icon-s-home"
-            plain
-            @click="goTarget('http://ruoyi.vip')"
-            >访问主页</el-button
-          >
-        </p>
-      </el-col>
-
-      <el-col :sm="24" :lg="12" style="padding-left: 50px">
-        <el-row>
-          <el-col :span="12">
-            <h2>技术选型</h2>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="6">
-            <h4>后端技术</h4>
-            <ul>
-              <li>SpringBoot</li>
-              <li>Spring Security</li>
-              <li>JWT</li>
-              <li>MyBatis</li>
-              <li>Druid</li>
-              <li>Fastjson</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-          <el-col :span="6">
-            <h4>前端技术</h4>
-            <ul>
-              <li>Vue</li>
-              <li>Vuex</li>
-              <li>Element-ui</li>
-              <li>Axios</li>
-              <li>Sass</li>
-              <li>Quill</li>
-              <li>...</li>
-            </ul>
-          </el-col>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-divider />
-    <el-row :gutter="20">
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>联系信息</span>
-          </div>
-          <div class="body">
-            <p>
-              <i class="el-icon-s-promotion"></i> 官网:<el-link
-                href="http://www.ruoyi.vip"
-                target="_blank"
-                >http://www.ruoyi.vip</el-link
-              >
-            </p>
-            <p>
-              <i class="el-icon-user-solid"></i> QQ群:<s>满937441</s>
-              <s>满887144332</s> <s>满180251782</s> <s>满104180207</s>
-              <s>满186866453</s> <s>满201396349</s> <s>满101456076</s> <s>满101539465</s>
-              <a href="https://jq.qq.com/?_wv=1027&k=EI9an8lJ" target="_blank">
-                264312783</a
-              >
-            </p>
-            <p>
-              <i class="el-icon-chat-dot-round"></i> 微信:<a
-                href="javascript:;"
-                >/ *若依</a
-              >
-            </p>
-            <p>
-              <i class="el-icon-money"></i> 支付宝:<a
-                href="javascript:;"
-                class="支付宝信息"
-                >/ *若依</a
-              >
-            </p>
-          </div>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>更新日志</span>
-          </div>
-          <el-collapse accordion>
-            <el-collapse-item title="v3.8.1 - 2022-01-01">
-              <ol>
-                <li>新增Vue3前端代码生成模板</li>
-                <li>新增图片预览组件</li>
-                <li>新增压缩插件实现打包Gzip</li>
-                <li>自定义xss校验注解实现</li>
-                <li>自定义文字复制剪贴指令</li>
-                <li>代码生成预览支持复制内容</li>
-                <li>路由支持单独配置菜单或角色权限</li>
-                <li>用户管理部门查询选择节点后分页参数初始</li>
-                <li>修复用户分配角色属性错误</li>
-                <li>修复打包后字体图标偶现的乱码问题</li>
-                <li>修复菜单管理重置表单出现的错误</li>
-                <li>修复版本差异导致的懒加载报错问题</li>
-                <li>修复Cron组件中周回显问题</li>
-                <li>修复定时任务多参数逗号分隔的问题</li>
-                <li>修复根据ID查询列表可能出现的主键溢出问题</li>
-                <li>修复tomcat配置参数已过期问题</li>
-                <li>升级clipboard到最新版本2.0.8</li>
-                <li>升级oshi到最新版本v5.8.6</li>
-                <li>升级fastjson到最新版1.2.79</li>
-                <li>升级spring-boot到最新版本2.5.8</li>
-                <li>升级log4j2到2.17.1,防止漏洞风险</li>
-                <li>优化下载解析blob异常提示</li>
-                <li>优化代码生成字典组重复问题</li>
-                <li>优化查询用户的角色组&岗位组代码</li>
-                <li>优化定时任务cron表达式小时设置24</li>
-                <li>优化用户导入提示溢出则显示滚动条</li>
-                <li>优化防重复提交标识组合为(key+url+header)</li>
-                <li>优化分页方法设置成通用方便灵活调用</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.8.0 - 2021-12-01">
-              <ol>
-                <li>新增配套并同步的Vue3前端版本</li>
-                <li>新增通用方法简化模态/缓存/下载/权限/页签使用</li>
-                <li>优化导出数据/使用通用下载方法</li>
-                <li>Excel注解支持自定义数据处理器</li>
-                <li>Excel注解支持导入导出标题信息</li>
-                <li>Excel导入支持@Excels注解</li>
-                <li>新增组件data-dict,简化数据字典使用</li>
-                <li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li>
-                <li>生产环境使用路由懒加载提升页面响应速度</li>
-                <li>修复五级以上菜单出现的404问题</li>
-                <li>防重提交注解支持配置间隔时间/提示消息</li>
-                <li>日志注解新增是否保存响应参数</li>
-                <li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>
-                <li>升级SpringBoot到最新版本2.5.6</li>
-                <li>升级pagehelper到最新版1.4.0</li>
-                <li>升级spring-boot-mybatis到最新版2.2.0</li>
-                <li>升级oshi到最新版本v5.8.2</li>
-                <li>升级druid到最新版1.2.8</li>
-                <li>升级velocity到最新版本2.3</li>
-                <li>升级fastjson到最新版1.2.78</li>
-                <li>升级axios到最新版本0.24.0</li>
-                <li>升级dart-sass到版本1.32.13</li>
-                <li>升级core-js到最新版本3.19.1</li>
-                <li>升级jsencrypt到最新版本3.2.1</li>
-                <li>升级js-cookie到最新版本3.0.1</li>
-                <li>升级file-saver到最新版本2.0.5</li>
-                <li>升级sass-loader到最新版本10.1.1</li>
-                <li>升级element-ui到最新版本2.15.6</li>
-                <li>新增sendGet无参请求方法</li>
-                <li>禁用el-tag组件的渐变动画</li>
-                <li>代码生成点击预览重置激活tab</li>
-                <li>AjaxResult重写put方法,以方便链式调用</li>
-                <li>优化登录/验证码请求headers不设置token</li>
-                <li>优化用户个人信息接口防止修改用户名</li>
-                <li>优化Cron表达式生成器关闭时销毁避免缓存</li>
-                <li>优化注册成功提示消息类型success</li>
-                <li>优化aop语法,使用spring自动注入注解</li>
-                <li>优化记录登录信息,移除不必要的修改</li>
-                <li>优化mybatis全局默认的执行器</li>
-                <li>优化Excel导入图片可能出现的异常</li>
-                <li>修复代码生成模板主子表删除缺少事务</li>
-                <li>修复日志记录可能出现的转换异常</li>
-                <li>修复代码生成复选框字典遗漏问题</li>
-                <li>修复关闭xss功能导致可重复读RepeatableFilter失效</li>
-                <li>修复字符串无法被反转义问题</li>
-                <li>修复后端主子表代码模板方法名生成错误问题</li>
-                <li>修复xss过滤后格式出现的异常</li>
-                <li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.7.0 - 2021-09-13">
-              <ol>
-                <li>参数管理支持配置验证码开关</li>
-                <li>新增是否开启用户注册功能</li>
-                <li>定时任务支持在线生成cron表达式</li>
-                <li>菜单管理支持配置路由参数</li>
-                <li>支持自定义注解实现接口限流</li>
-                <li>Excel注解支持Image图片导入</li>
-                <li>自定义弹层溢出滚动样式</li>
-                <li>自定义可拖动弹窗宽度指令</li>
-                <li>自定义可拖动弹窗高度指令</li>
-                <li>修复任意账户越权问题</li>
-                <li>修改时检查用户数据权限范围</li>
-                <li>修复保存配置主题颜色失效问题</li>
-                <li>新增暗色菜单风格主题</li>
-                <li>菜单&部门新增展开/折叠功能</li>
-                <li>页签新增关闭左侧&添加图标</li>
-                <li>顶部菜单排除隐藏的默认路由</li>
-                <li>顶部菜单同步系统主题样式</li>
-                <li>跳转路由高亮相对应的菜单栏</li>
-                <li>代码生成主子表多选行数据</li>
-                <li>日期范围支持添加多组</li>
-                <li>升级element-ui到最新版本2.15.5</li>
-                <li>升级oshi到最新版本v5.8.0</li>
-                <li>升级commons.io到最新版本v2.11.0</li>
-                <li>定时任务屏蔽ldap远程调用</li>
-                <li>定时任务屏蔽http(s)远程调用</li>
-                <li>补充定时任务表字段注释</li>
-                <li>定时任务对检查异常进行事务回滚</li>
-                <li>启用父部门状态排除顶级节点</li>
-                <li>富文本新增上传文件大小限制</li>
-                <li>默认首页使用keep-alive缓存</li>
-                <li>修改代码生成字典回显样式</li>
-                <li>自定义分页合理化传入参数</li>
-                <li>修复字典组件值为整形不显示问题</li>
-                <li>修复定时任务日志执行状态显示</li>
-                <li>角色&菜单新增字段属性提示信息</li>
-                <li>修复角色分配用户页面参数类型错误提醒</li>
-                <li>优化布局设置动画特效</li>
-                <li>优化异常处理信息</li>
-                <li>优化错误token导致的解析异常</li>
-                <li>密码框新增显示切换密码图标</li>
-                <li>定时任务新增更多操作</li>
-                <li>更多操作按钮添加权限控制</li>
-                <li>导入用户样式优化</li>
-                <li>提取通用方法到基类控制器</li>
-                <li>优化使用权限工具获取用户信息</li>
-                <li>优化用户不能删除自己</li>
-                <li>优化XSS跨站脚本过滤</li>
-                <li>优化代码生成模板</li>
-                <li>验证码默认20s超时</li>
-                <li>BLOB下载时清除URL对象引用</li>
-                <li>代码生成导入表按创建时间排序</li>
-                <li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
-                <li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
-                <li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.6.0 - 2021-07-12">
-              <ol>
-                <li>角色管理新增分配用户功能</li>
-                <li>用户管理新增分配角色功能</li>
-                <li>日志列表支持排序操作</li>
-                <li>优化参数&字典缓存操作</li>
-                <li>系统布局配置支持动态标题开关</li>
-                <li>菜单路由配置支持内链访问</li>
-                <li>默认访问后端首页新增提示语</li>
-                <li>富文本默认上传返回url类型</li>
-                <li>新增自定义弹窗拖拽指令</li>
-                <li>全局注册常用通用组件</li>
-                <li>全局挂载字典标签组件</li>
-                <li>ImageUpload组件支持多图片上传</li>
-                <li>FileUpload组件支持多文件上传</li>
-                <li>文件上传组件添加数量限制属性</li>
-                <li>富文本编辑组件添加类型属性</li>
-                <li>富文本组件工具栏配置视频</li>
-                <li>封装通用iframe组件</li>
-                <li>限制超级管理员不允许操作</li>
-                <li>用户信息长度校验限制</li>
-                <li>分页组件新增pagerCount属性</li>
-                <li>添加bat脚本执行应用</li>
-                <li>升级oshi到最新版本v5.7.4</li>
-                <li>升级element-ui到最新版本2.15.2</li>
-                <li>升级pagehelper到最新版1.3.1</li>
-                <li>升级commons.io到最新版本v2.10.0</li>
-                <li>升级commons.fileupload到最新版本v1.4</li>
-                <li>升级swagger到最新版本v3.0.0</li>
-                <li>修复关闭confirm提示框控制台报错问题</li>
-                <li>修复存在的SQL注入漏洞问题</li>
-                <li>定时任务屏蔽rmi远程调用</li>
-                <li>修复用户搜索分页变量错误</li>
-                <li>修复导出角色数据范围翻译缺少仅本人</li>
-                <li>修复表单构建选择下拉选择控制台报错问题</li>
-                <li>优化图片工具类读取文件</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.5.0 - 2021-05-25">
-              <ol>
-                <li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>
-                <li>布局设置支持保存&重置配置</li>
-                <li>修复树表数据显示不全&加载慢问题</li>
-                <li>新增IE浏览器版本过低提示页面</li>
-                <li>用户登录后记录最后登录IP&时间</li>
-                <li>页面导出按钮点击之后添加遮罩</li>
-                <li>富文本编辑器支持自定义上传地址</li>
-                <li>富文本编辑组件新增readOnly属性</li>
-                <li>页签TagsView新增关闭右侧功能</li>
-                <li>显隐列组件加载初始默认隐藏列</li>
-                <li>关闭头像上传窗口还原默认图片</li>
-                <li>个人信息添加手机&邮箱重复验证</li>
-                <li>代码生成模板导出按钮点击后添加遮罩</li>
-                <li>代码生成模板树表操作列添加新增按钮</li>
-                <li>代码生成模板修复主子表字段重名问题</li>
-                <li>升级fastjson到最新版1.2.76</li>
-                <li>升级druid到最新版本v1.2.6</li>
-                <li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>
-                <li>升级oshi到最新版本v5.6.0</li>
-                <li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li>
-                <li>数据监控页默认账户密码防止越权访问</li>
-                <li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
-                <li>修正后端导入表权限标识</li>
-                <li>修正前端操作日志&登录日志权限标识</li>
-                <li>设置Redis配置HashKey序列化</li>
-                <li>删除操作日志记录信息</li>
-                <li>上传媒体类型添加视频格式</li>
-                <li>修复请求形参未传值记录日志异常问题</li>
-                <li>优化xss校验json请求条件</li>
-                <li>树级结构更新子节点使用replaceFirst</li>
-                <li>优化ExcelUtil空值处理</li>
-                <li>日志记录过滤BindingResult对象,防止异常</li>
-                <li>修改主题后mini类型按钮无效问题</li>
-                <li>优化通用下载完成后删除节点</li>
-                <li>通用Controller添加响应返回消息</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.4.0 - 2021-02-22">
-              <ol>
-                <li>代码生成模板支持主子表</li>
-                <li>表格右侧工具栏组件支持显隐列</li>
-                <li>图片组件添加预览&移除功能</li>
-                <li>Excel注解支持Image图片导出</li>
-                <li>操作按钮组调整为朴素按钮样式</li>
-                <li>代码生成支持文件上传组件</li>
-                <li>代码生成日期控件区分范围</li>
-                <li>代码生成数据库文本类型生成表单文本域</li>
-                <li>用户手机邮箱&菜单组件修改允许空字符串</li>
-                <li>升级SpringBoot到最新版本2.2.13 提升启动速度</li>
-                <li>升级druid到最新版本v1.2.4</li>
-                <li>升级fastjson到最新版1.2.75</li>
-                <li>升级element-ui到最新版本2.15.0</li>
-                <li>修复IE11浏览器报错问题</li>
-                <li>优化多级菜单之间切换无法缓存的问题</li>
-                <li>修复四级菜单无法显示问题</li>
-                <li>修正侧边栏静态路由丢失问题</li>
-                <li>修复角色管理-编辑角色-功能权限显示异常</li>
-                <li>配置文件新增redis数据库索引属性</li>
-                <li>权限工具类增加admin判断</li>
-                <li>角色非自定义权限范围清空选择值</li>
-                <li>修复导入数据为负浮点数时丢失精度问题</li>
-                <li>移除path-to-regexp正则匹配插件</li>
-                <li>修复生成树表代码异常</li>
-                <li>修改ip字段长度防止ipv6地址长度不够</li>
-                <li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li>
-                <li>登录后push添加catch防止出现检查错误</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.3.0 - 2020-12-14">
-              <ol>
-                <li>新增缓存监控功能</li>
-                <li>支持主题风格配置</li>
-                <li>修复多级菜单之间切换无法缓存的问题</li>
-                <li>多级菜单自动配置组件</li>
-                <li>代码生成预览支持高亮显示</li>
-                <li>支持Get请求映射Params参数</li>
-                <li>删除用户和角色解绑关联</li>
-                <li>去除用户手机邮箱部门必填验证</li>
-                <li>Excel支持注解align对齐方式</li>
-                <li>Excel支持导入Boolean型数据</li>
-                <li>优化头像样式,鼠标移入悬停遮罩</li>
-                <li>代码生成预览提供滚动机制</li>
-                <li>代码生成删除多余的数字float类型</li>
-                <li>修正转换字符串的目标字符集属性</li>
-                <li>回显数据字典防止空值报错</li>
-                <li>日志记录增加过滤多文件场景</li>
-                <li>修改缓存Set方法可能导致嵌套的问题</li>
-                <li>移除前端一些多余的依赖</li>
-                <li>防止安全扫描YUI出现的风险提示</li>
-                <li>修改node-sass为dart-sass</li>
-                <li>升级SpringBoot到最新版本2.1.18</li>
-                <li>升级poi到最新版本4.1.2</li>
-                <li>升级oshi到最新版本v5.3.6</li>
-                <li>升级bitwalker到最新版本1.21</li>
-                <li>升级axios到最新版本0.21.0</li>
-                <li>升级element-ui到最新版本2.14.1</li>
-                <li>升级vue到最新版本2.6.12</li>
-                <li>升级vuex到最新版本3.6.0</li>
-                <li>升级vue-cli到版本4.5.9</li>
-                <li>升级vue-router到最新版本3.4.9</li>
-                <li>升级vue-cli到最新版本4.4.6</li>
-                <li>升级vue-cropper到最新版本0.5.5</li>
-                <li>升级clipboard到最新版本2.0.6</li>
-                <li>升级core-js到最新版本3.8.1</li>
-                <li>升级echarts到最新版本4.9.0</li>
-                <li>升级file-saver到最新版本2.0.4</li>
-                <li>升级fuse.js到最新版本6.4.3</li>
-                <li>升级js-beautify到最新版本1.13.0</li>
-                <li>升级js-cookie到最新版本2.2.1</li>
-                <li>升级path-to-regexp到最新版本6.2.0</li>
-                <li>升级quill到最新版本1.3.7</li>
-                <li>升级screenfull到最新版本5.0.2</li>
-                <li>升级sortablejs到最新版本1.10.2</li>
-                <li>升级vuedraggable到最新版本2.24.3</li>
-                <li>升级chalk到最新版本4.1.0</li>
-                <li>升级eslint到最新版本7.15.0</li>
-                <li>升级eslint-plugin-vue到最新版本7.2.0</li>
-                <li>升级lint-staged到最新版本10.5.3</li>
-                <li>升级runjs到最新版本4.4.2</li>
-                <li>升级sass-loader到最新版本10.1.0</li>
-                <li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>
-                <li>升级svg-sprite-loader到最新版本5.1.1</li>
-                <li>升级vue-template-compiler到最新版本2.6.12</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.1 - 2020-11-18">
-              <ol>
-                <li>阻止任意文件下载漏洞</li>
-                <li>代码生成支持上传控件</li>
-                <li>新增图片上传组件</li>
-                <li>调整默认首页</li>
-                <li>升级druid到最新版本v1.2.2</li>
-                <li>mapperLocations配置支持分隔符</li>
-                <li>权限信息调整</li>
-                <li>调整sql默认时间</li>
-                <li>解决代码生成没有bit类型的问题</li>
-                <li>升级pagehelper到最新版1.3.0</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v3.2.0 - 2020-10-10">
-              <ol>
-                <li>升级springboot版本到2.1.17 提升安全性</li>
-                <li>升级oshi到最新版本v5.2.5</li>
-                <li>升级druid到最新版本v1.2.1</li>
-                <li>升级jjwt到版本0.9.1</li>
-                <li>升级fastjson到最新版1.2.74</li>
-                <li>修改sass为node-sass,避免el-icon图标乱码</li>
-                <li>代码生成支持同步数据库</li>
-                <li>代码生成支持富文本控件</li>
-                <li>代码生成页面时不忽略remark属性</li>
-                <li>代码生成添加select必填选项</li>
-                <li>Excel导出类型NUMERIC支持精度浮点类型</li>
-                <li>Excel导出targetAttr优化获取值,防止get方法不规范</li>
-                <li>Excel注解支持自动统计数据总和</li>
-                <li>Excel注解支持设置BigDecimal精度&舍入规则</li>
-                <li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>
-                <li>允许用户分配到部门父节点</li>
-                <li>菜单新增是否缓存keep-alive</li>
-                <li>表格操作列间距调整</li>
-                <li>限制系统内置参数不允许删除</li>
-                <li>富文本组件优化,支持自定义高度&图片冲突问题</li>
-                <li>富文本工具栏样式对齐</li>
-                <li>导入excel整形值校验优化</li>
-                <li>修复页签关闭所有时固定标签路由不刷新问题</li>
-                <li>表单构建布局型组件新增按钮</li>
-                <li>左侧菜单文字过长显示省略号</li>
-                <li>修正根节点为子部门时,树状结构显示问题</li>
-                <li>修正调用目标字符串最大长度</li>
-                <li>修正菜单提示信息错误</li>
-                <li>修正定时任务执行一次权限标识</li>
-                <li>修正数据库字符串类型nvarchar</li>
-                <li>优化递归子节点</li>
-                <li>优化数据权限判断</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.1.0 - 2020-08-13">
-              <ol>
-                <li>表格工具栏右侧添加刷新&显隐查询组件</li>
-                <li>后端支持CORS跨域请求</li>
-                <li>代码生成支持选择上级菜单</li>
-                <li>代码生成支持自定义路径</li>
-                <li>代码生成支持复选框</li>
-                <li>Excel导出导入支持dictType字典类型</li>
-                <li>Excel支持分割字符串组内容</li>
-                <li>验证码类型支持(数组计算、字符验证)</li>
-                <li>升级vue-cli版本到4.4.4</li>
-                <li>修改 node-sass 为 dart-sass</li>
-                <li>表单类型为Integer/Long设置整形默认值</li>
-                <li>代码生成器默认mapper路径与默认mapperScan路径不一致</li>
-                <li>优化防重复提交拦截器</li>
-                <li>优化上级菜单不能选择自己</li>
-                <li>修复角色的权限分配后,未实时生效问题</li>
-                <li>修复在线用户日志记录类型</li>
-                <li>修复富文本空格和缩进保存后不生效问题</li>
-                <li>修复在线用户判断逻辑</li>
-                <li>唯一限制条件只返回单条数据</li>
-                <li>添加获取当前的环境配置方法</li>
-                <li>超时登录后页面跳转到首页</li>
-                <li>全局异常状态汉化拦截处理</li>
-                <li>HTML过滤器改为将html转义</li>
-                <li>检查字符支持小数点&降级改成异常提醒</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v3.0.0 - 2020-07-20">
-              <ol>
-                <li>单应用调整为多模块项目</li>
-                <li>升级element-ui版本到2.13.2</li>
-                <li>删除babel,提高编译速度。</li>
-                <li>新增菜单默认主类目</li>
-                <li>编码文件名修改为uuid方式</li>
-                <li>定时任务cron表达式验证</li>
-                <li>角色权限修改时已有权限未自动勾选异常修复</li>
-                <li>防止切换权限用户后登录出现404</li>
-                <li>Excel支持sort导出排序</li>
-                <li>创建用户不允许选择超级管理员角色</li>
-                <li>修复代码生成导入表结构出现异常页面不提醒问题</li>
-                <li>修复代码生成点击多次表修改数据不变化的问题</li>
-                <li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>
-                <li>修复布局为small者mini用户表单显示错位问题</li>
-                <li>修复热部署导致的强换异常问题</li>
-                <li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>
-                <li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li>
-                <li>生成domain 如果是浮点型 统一用BigDecimal</li>
-                <li>定时任务调整label-width,防止部署出现错位</li>
-                <li>调整表头固定列默认样式</li>
-                <li>代码生成模板调整,字段为String并且必填则加空串条件</li>
-                <li>代码生成字典Integer/Long使用parseInt</li>
-                <li>
-                  修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
-                </li>
-                <li>修正岗位导出权限注解</li>
-                <li>禁止加密密文返回前端</li>
-                <li>修复代码生成页面中的查询条件创建时间未生效的问题</li>
-                <li>修复首页搜索菜单外链无法点击跳转问题</li>
-                <li>修复菜单管理选择图标,backspace删除时不过滤数据</li>
-                <li>用户管理部门分支节点不可检查&显示计数</li>
-                <li>数据范围过滤属性调整</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.3.0 - 2020-06-01">
-              <ol>
-                <li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
-                <li>dev启动默认打开浏览器</li>
-                <li>vue-cli使用默认source-map</li>
-                <li>slidebar eslint报错优化</li>
-                <li>当tags-view滚动关闭右键菜单</li>
-                <li>字典管理添加缓存读取</li>
-                <li>参数管理支持缓存操作</li>
-                <li>支持一级菜单(和主页同级)在main区域显示</li>
-                <li>限制外链地址必须以http(s)开头</li>
-                <li>tagview & sidebar 主题颜色与element ui(全局)同步</li>
-                <li>修改数据源类型优先级,先根据方法,再根据类</li>
-                <li>支持是否需要设置token属性,自定义返回码消息。</li>
-                <li>swagger请求前缀加入配置。</li>
-                <li>登录地点设置内容过长则隐藏显示</li>
-                <li>修复定时任务执行一次按钮后不提示消息问题</li>
-                <li>修改上级部门(选择项排除本身和下级)</li>
-                <li>通用http发送方法增加参数 contentType 编码类型</li>
-                <li>更换IP地址查询接口</li>
-                <li>修复页签变量undefined</li>
-                <li>添加校验部门包含未停用的子部门</li>
-                <li>修改定时任务详情下次执行时间日期显示错误</li>
-                <li>角色管理查询设置默认排序字段</li>
-                <li>swagger添加enable参数控制是否启用</li>
-                <li>只对json类型请求构建可重复读取inputStream的request</li>
-                <li>修改代码生成字典字段int类型没有自动选中问题</li>
-                <li>vuex用户名取值修正</li>
-                <li>表格树模板去掉多余的)</li>
-                <li>代码生成序号修正</li>
-                <li>全屏情况下不调整上外边距</li>
-                <li>代码生成Date字段添加默认格式</li>
-                <li>用户管理角色选择权限控制</li>
-                <li>修复路由懒加载报错问题</li>
-                <li>模板sql.vm添加菜单状态</li>
-                <li>设置用户名称不能修改</li>
-                <li>dialog添加append-to-body属性,防止ie遮罩</li>
-                <li>菜单区分状态和显示隐藏功能</li>
-                <li>升级fastjson到最新版1.2.68 修复安全加固</li>
-                <li>修复代码生成如果选择字典类型缺失逗号问题</li>
-                <li>登录请求params更换为data,防止暴露url</li>
-                <li>日志返回时间格式处理</li>
-                <li>添加handle控制允许拖动的元素</li>
-                <li>布局设置点击扩大范围</li>
-                <li>代码生成列属性排序查询</li>
-                <li>代码生成列支持拖动排序</li>
-                <li>修复时间格式不支持ios问题</li>
-                <li>表单构建添加父级class,防止冲突</li>
-                <li>定时任务并发属性修正</li>
-                <li>角色禁用&菜单隐藏不查询权限</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.2.0 - 2020-03-18">
-              <ol>
-                <li>系统监控新增定时任务功能</li>
-                <li>添加一个打包Web工程bat</li>
-                <li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li>
-                <li>修复点击退出登录有时会无提示问题</li>
-                <li>修复防重复提交注解无效问题</li>
-                <li>修复通知公告批量删除异常问题</li>
-                <li>添加菜单时路由地址必填限制</li>
-                <li>代码生成字段描述可编辑</li>
-                <li>修复用户修改个人信息导致缓存不过期问题</li>
-                <li>个人信息创建时间获取正确属性值</li>
-                <li>操作日志详细显示正确类型</li>
-                <li>导入表单击行数据时选中对应的复选框</li>
-                <li>批量替换表前缀逻辑调整</li>
-                <li>固定重定向路径表达式</li>
-                <li>升级element-ui版本到2.13.0</li>
-                <li>操作日志排序调整</li>
-                <li>修复charts切换侧边栏或者缩放窗口显示bug</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.1.0 - 2020-02-24">
-              <ol>
-                <li>新增表单构建</li>
-                <li>代码生成支持树表结构</li>
-                <li>新增用户导入</li>
-                <li>修复动态加载路由页面刷新问题</li>
-                <li>修复地址开关无效问题</li>
-                <li>汉化错误提示页面</li>
-                <li>代码生成已知问题修改</li>
-                <li>修复多数据源下配置关闭出现异常处理</li>
-                <li>添加HTML过滤器,用于去除XSS漏洞隐患</li>
-                <li>修复上传头像控制台出现异常</li>
-                <li>修改用户管理分页不正确的问题</li>
-                <li>修复验证码记录提示错误</li>
-                <li>修复request.js缺少Message引用</li>
-                <li>修复表格时间为空出现的异常</li>
-                <li>添加Jackson日期反序列化时区配置</li>
-                <li>调整根据用户权限加载菜单数据树形结构</li>
-                <li>调整成功登录不恢复按钮,防止多次点击</li>
-                <li>修改用户个人资料同步缓存信息</li>
-                <li>修复页面同时出现el-upload和Editor不显示处理</li>
-                <li>修复在角色管理页修改菜单权限偶尔未选中问题</li>
-                <li>配置文件新增redis密码属性</li>
-                <li>设置mybatis全局的配置文件</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-
-            <el-collapse-item title="v2.0.0 - 2019-12-02">
-              <ol>
-                <li>新增代码生成</li>
-                <li>新增@RepeatSubmit注解,防止重复提交</li>
-                <li>新增菜单主目录添加/删除操作</li>
-                <li>日志记录过滤特殊对象,防止转换异常</li>
-                <li>修改代码生成路由脚本错误</li>
-                <li>用户上传头像实时同步缓存,无需重新登录</li>
-                <li>调整切换页签后不重新加载数据</li>
-                <li>添加jsencrypt实现参数的前端加密</li>
-                <li>系统退出删除用户缓存记录</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.1.0 - 2019-11-11">
-              <ol>
-                <li>新增在线用户管理</li>
-                <li>新增按钮组功能实现(批量删除、导出、清空)</li>
-                <li>新增查询条件重置按钮</li>
-                <li>新增Swagger全局Token配置</li>
-                <li>新增后端参数校验</li>
-                <li>修复字典管理页面的日期查询异常</li>
-                <li>修改时间函数命名防止冲突</li>
-                <li>去除菜单上级校验,默认为顶级</li>
-                <li>修复用户密码无法修改问题</li>
-                <li>修复菜单类型为按钮时不显示权限标识</li>
-                <li>其他细节优化</li>
-              </ol>
-            </el-collapse-item>
-            <el-collapse-item title="v1.0.0 - 2019-10-08">
-              <ol>
-                <li>若依前后端分离系统正式发布</li>
-              </ol>
-            </el-collapse-item>
-          </el-collapse>
-        </el-card>
-      </el-col>
-      <el-col :xs="24" :sm="24" :md="12" :lg="8">
-        <el-card class="update-log">
-          <div slot="header" class="clearfix">
-            <span>捐赠支持</span>
-          </div>
-          <div class="body">
-            <img
-              src="https://oscimg.oschina.net/oscnet/up-d6695f82666e5018f715c41cb7ee60d3b73.png"
-              alt="donate"
-              width="100%"
-            />
-            <span style="display: inline-block; height: 30px; line-height: 30px"
-              >你可以请作者喝杯咖啡表示鼓励</span
-            >
-          </div>
-        </el-card>
-      </el-col>
-    </el-row> -->
-  </div>
-</template>
-
-<script>
-export default {
-  name: "Index",
-  data() {
-    return {
-      // 版本号
-      version: "3.8.1",
-    };
-  },
-  methods: {
-    goTarget(href) {
-      window.open(href, "_blank");
-    },
-  },
-};
-</script>
-
-<style scoped lang="scss">
-.home {
-  blockquote {
-    padding: 10px 20px;
-    margin: 0 0 20px;
-    font-size: 17.5px;
-    border-left: 5px solid #eee;
-  }
-  hr {
-    margin-top: 20px;
-    margin-bottom: 20px;
-    border: 0;
-    border-top: 1px solid #eee;
-  }
-  .col-item {
-    margin-bottom: 20px;
-  }
-
-  ul {
-    padding: 0;
-    margin: 0;
-  }
-
-  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 13px;
-  color: #676a6c;
-  overflow-x: hidden;
-
-  ul {
-    list-style-type: none;
-  }
-
-  h4 {
-    margin-top: 0px;
-  }
-
-  h2 {
-    margin-top: 10px;
-    font-size: 26px;
-    font-weight: 100;
-  }
-
-  p {
-    margin-top: 10px;
-
-    b {
-      font-weight: 700;
-    }
-  }
-
-  .update-log {
-    ol {
-      display: block;
-      list-style-type: decimal;
-      margin-block-start: 1em;
-      margin-block-end: 1em;
-      margin-inline-start: 0;
-      margin-inline-end: 0;
-      padding-inline-start: 40px;
-    }
-  }
-}
-</style>
-
+<template>
+  <div class="app-container home">
+    <!-- <el-row :gutter="20">
+      <el-col :sm="24" :lg="24">
+        <blockquote class="text-warning" style="font-size: 14px">
+          领取阿里云通用云产品1888优惠券
+          <br />
+          <el-link
+            href="https://www.aliyun.com/minisite/goods?userCode=brki8iof"
+            type="primary"
+            target="_blank"
+            >https://www.aliyun.com/minisite/goods?userCode=brki8iof</el-link
+          >
+          <br />
+          领取腾讯云通用云产品2860优惠券
+          <br />
+          <el-link
+            href="https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console"
+            type="primary"
+            target="_blank"
+            >https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console</el-link
+          >
+          <br />
+          阿里云服务器折扣区
+          <el-link href="http://aly.ruoyi.vip" type="primary" target="_blank"
+            >>☛☛点我进入☚☚</el-link
+          >
+          &nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区
+          <el-link href="http://txy.ruoyi.vip" type="primary" target="_blank"
+            >>☛☛点我进入☚☚</el-link
+          ><br />
+          <h4 class="text-danger">
+            云产品通用红包,可叠加官网常规优惠使用。(仅限新用户)
+          </h4>
+        </blockquote>
+
+        <hr />
+      </el-col>
+    </el-row>
+    <el-row :gutter="20">
+      <el-col :sm="24" :lg="12" style="padding-left: 20px">
+        <h2>启东市铁路沿线综合治理信息化管理平台</h2>
+        <p>
+          一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统。,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
+        </p>
+        <p>
+          <b>当前版本:</b> <span>v{{ version }}</span>
+        </p>
+        <p>
+          <el-tag type="danger">&yen;免费开源</el-tag>
+        </p>
+        <p>
+          <el-button
+            type="primary"
+            size="mini"
+            icon="el-icon-cloudy"
+            plain
+            @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
+            >访问码云</el-button
+          >
+          <el-button
+            size="mini"
+            icon="el-icon-s-home"
+            plain
+            @click="goTarget('http://ruoyi.vip')"
+            >访问主页</el-button
+          >
+        </p>
+      </el-col>
+
+      <el-col :sm="24" :lg="12" style="padding-left: 50px">
+        <el-row>
+          <el-col :span="12">
+            <h2>技术选型</h2>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="6">
+            <h4>后端技术</h4>
+            <ul>
+              <li>SpringBoot</li>
+              <li>Spring Security</li>
+              <li>JWT</li>
+              <li>MyBatis</li>
+              <li>Druid</li>
+              <li>Fastjson</li>
+              <li>...</li>
+            </ul>
+          </el-col>
+          <el-col :span="6">
+            <h4>前端技术</h4>
+            <ul>
+              <li>Vue</li>
+              <li>Vuex</li>
+              <li>Element-ui</li>
+              <li>Axios</li>
+              <li>Sass</li>
+              <li>Quill</li>
+              <li>...</li>
+            </ul>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+    <el-divider />
+    <el-row :gutter="20">
+      <el-col :xs="24" :sm="24" :md="12" :lg="8">
+        <el-card class="update-log">
+          <div slot="header" class="clearfix">
+            <span>联系信息</span>
+          </div>
+          <div class="body">
+            <p>
+              <i class="el-icon-s-promotion"></i> 官网:<el-link
+                href="http://www.ruoyi.vip"
+                target="_blank"
+                >http://www.ruoyi.vip</el-link
+              >
+            </p>
+            <p>
+              <i class="el-icon-user-solid"></i> QQ群:<s>满937441</s>
+              <s>满887144332</s> <s>满180251782</s> <s>满104180207</s>
+              <s>满186866453</s> <s>满201396349</s> <s>满101456076</s> <s>满101539465</s>
+              <a href="https://jq.qq.com/?_wv=1027&k=EI9an8lJ" target="_blank">
+                264312783</a
+              >
+            </p>
+            <p>
+              <i class="el-icon-chat-dot-round"></i> 微信:<a
+                href="javascript:;"
+                >/ *若依</a
+              >
+            </p>
+            <p>
+              <i class="el-icon-money"></i> 支付宝:<a
+                href="javascript:;"
+                class="支付宝信息"
+                >/ *若依</a
+              >
+            </p>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :xs="24" :sm="24" :md="12" :lg="8">
+        <el-card class="update-log">
+          <div slot="header" class="clearfix">
+            <span>更新日志</span>
+          </div>
+          <el-collapse accordion>
+            <el-collapse-item title="v3.8.1 - 2022-01-01">
+              <ol>
+                <li>新增Vue3前端代码生成模板</li>
+                <li>新增图片预览组件</li>
+                <li>新增压缩插件实现打包Gzip</li>
+                <li>自定义xss校验注解实现</li>
+                <li>自定义文字复制剪贴指令</li>
+                <li>代码生成预览支持复制内容</li>
+                <li>路由支持单独配置菜单或角色权限</li>
+                <li>用户管理部门查询选择节点后分页参数初始</li>
+                <li>修复用户分配角色属性错误</li>
+                <li>修复打包后字体图标偶现的乱码问题</li>
+                <li>修复菜单管理重置表单出现的错误</li>
+                <li>修复版本差异导致的懒加载报错问题</li>
+                <li>修复Cron组件中周回显问题</li>
+                <li>修复定时任务多参数逗号分隔的问题</li>
+                <li>修复根据ID查询列表可能出现的主键溢出问题</li>
+                <li>修复tomcat配置参数已过期问题</li>
+                <li>升级clipboard到最新版本2.0.8</li>
+                <li>升级oshi到最新版本v5.8.6</li>
+                <li>升级fastjson到最新版1.2.79</li>
+                <li>升级spring-boot到最新版本2.5.8</li>
+                <li>升级log4j2到2.17.1,防止漏洞风险</li>
+                <li>优化下载解析blob异常提示</li>
+                <li>优化代码生成字典组重复问题</li>
+                <li>优化查询用户的角色组&岗位组代码</li>
+                <li>优化定时任务cron表达式小时设置24</li>
+                <li>优化用户导入提示溢出则显示滚动条</li>
+                <li>优化防重复提交标识组合为(key+url+header)</li>
+                <li>优化分页方法设置成通用方便灵活调用</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.8.0 - 2021-12-01">
+              <ol>
+                <li>新增配套并同步的Vue3前端版本</li>
+                <li>新增通用方法简化模态/缓存/下载/权限/页签使用</li>
+                <li>优化导出数据/使用通用下载方法</li>
+                <li>Excel注解支持自定义数据处理器</li>
+                <li>Excel注解支持导入导出标题信息</li>
+                <li>Excel导入支持@Excels注解</li>
+                <li>新增组件data-dict,简化数据字典使用</li>
+                <li>新增Jaxb依赖,防止jdk8以上出现的兼容错误</li>
+                <li>生产环境使用路由懒加载提升页面响应速度</li>
+                <li>修复五级以上菜单出现的404问题</li>
+                <li>防重提交注解支持配置间隔时间/提示消息</li>
+                <li>日志注解新增是否保存响应参数</li>
+                <li>任务屏蔽违规字符&参数忽略双引号中的逗号</li>
+                <li>升级SpringBoot到最新版本2.5.6</li>
+                <li>升级pagehelper到最新版1.4.0</li>
+                <li>升级spring-boot-mybatis到最新版2.2.0</li>
+                <li>升级oshi到最新版本v5.8.2</li>
+                <li>升级druid到最新版1.2.8</li>
+                <li>升级velocity到最新版本2.3</li>
+                <li>升级fastjson到最新版1.2.78</li>
+                <li>升级axios到最新版本0.24.0</li>
+                <li>升级dart-sass到版本1.32.13</li>
+                <li>升级core-js到最新版本3.19.1</li>
+                <li>升级jsencrypt到最新版本3.2.1</li>
+                <li>升级js-cookie到最新版本3.0.1</li>
+                <li>升级file-saver到最新版本2.0.5</li>
+                <li>升级sass-loader到最新版本10.1.1</li>
+                <li>升级element-ui到最新版本2.15.6</li>
+                <li>新增sendGet无参请求方法</li>
+                <li>禁用el-tag组件的渐变动画</li>
+                <li>代码生成点击预览重置激活tab</li>
+                <li>AjaxResult重写put方法,以方便链式调用</li>
+                <li>优化登录/验证码请求headers不设置token</li>
+                <li>优化用户个人信息接口防止修改用户名</li>
+                <li>优化Cron表达式生成器关闭时销毁避免缓存</li>
+                <li>优化注册成功提示消息类型success</li>
+                <li>优化aop语法,使用spring自动注入注解</li>
+                <li>优化记录登录信息,移除不必要的修改</li>
+                <li>优化mybatis全局默认的执行器</li>
+                <li>优化Excel导入图片可能出现的异常</li>
+                <li>修复代码生成模板主子表删除缺少事务</li>
+                <li>修复日志记录可能出现的转换异常</li>
+                <li>修复代码生成复选框字典遗漏问题</li>
+                <li>修复关闭xss功能导致可重复读RepeatableFilter失效</li>
+                <li>修复字符串无法被反转义问题</li>
+                <li>修复后端主子表代码模板方法名生成错误问题</li>
+                <li>修复xss过滤后格式出现的异常</li>
+                <li>修复swagger没有指定dataTypeClass导致启动出现warn日志</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.7.0 - 2021-09-13">
+              <ol>
+                <li>参数管理支持配置验证码开关</li>
+                <li>新增是否开启用户注册功能</li>
+                <li>定时任务支持在线生成cron表达式</li>
+                <li>菜单管理支持配置路由参数</li>
+                <li>支持自定义注解实现接口限流</li>
+                <li>Excel注解支持Image图片导入</li>
+                <li>自定义弹层溢出滚动样式</li>
+                <li>自定义可拖动弹窗宽度指令</li>
+                <li>自定义可拖动弹窗高度指令</li>
+                <li>修复任意账户越权问题</li>
+                <li>修改时检查用户数据权限范围</li>
+                <li>修复保存配置主题颜色失效问题</li>
+                <li>新增暗色菜单风格主题</li>
+                <li>菜单&部门新增展开/折叠功能</li>
+                <li>页签新增关闭左侧&添加图标</li>
+                <li>顶部菜单排除隐藏的默认路由</li>
+                <li>顶部菜单同步系统主题样式</li>
+                <li>跳转路由高亮相对应的菜单栏</li>
+                <li>代码生成主子表多选行数据</li>
+                <li>日期范围支持添加多组</li>
+                <li>升级element-ui到最新版本2.15.5</li>
+                <li>升级oshi到最新版本v5.8.0</li>
+                <li>升级commons.io到最新版本v2.11.0</li>
+                <li>定时任务屏蔽ldap远程调用</li>
+                <li>定时任务屏蔽http(s)远程调用</li>
+                <li>补充定时任务表字段注释</li>
+                <li>定时任务对检查异常进行事务回滚</li>
+                <li>启用父部门状态排除顶级节点</li>
+                <li>富文本新增上传文件大小限制</li>
+                <li>默认首页使用keep-alive缓存</li>
+                <li>修改代码生成字典回显样式</li>
+                <li>自定义分页合理化传入参数</li>
+                <li>修复字典组件值为整形不显示问题</li>
+                <li>修复定时任务日志执行状态显示</li>
+                <li>角色&菜单新增字段属性提示信息</li>
+                <li>修复角色分配用户页面参数类型错误提醒</li>
+                <li>优化布局设置动画特效</li>
+                <li>优化异常处理信息</li>
+                <li>优化错误token导致的解析异常</li>
+                <li>密码框新增显示切换密码图标</li>
+                <li>定时任务新增更多操作</li>
+                <li>更多操作按钮添加权限控制</li>
+                <li>导入用户样式优化</li>
+                <li>提取通用方法到基类控制器</li>
+                <li>优化使用权限工具获取用户信息</li>
+                <li>优化用户不能删除自己</li>
+                <li>优化XSS跨站脚本过滤</li>
+                <li>优化代码生成模板</li>
+                <li>验证码默认20s超时</li>
+                <li>BLOB下载时清除URL对象引用</li>
+                <li>代码生成导入表按创建时间排序</li>
+                <li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
+                <li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
+                <li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.6.0 - 2021-07-12">
+              <ol>
+                <li>角色管理新增分配用户功能</li>
+                <li>用户管理新增分配角色功能</li>
+                <li>日志列表支持排序操作</li>
+                <li>优化参数&字典缓存操作</li>
+                <li>系统布局配置支持动态标题开关</li>
+                <li>菜单路由配置支持内链访问</li>
+                <li>默认访问后端首页新增提示语</li>
+                <li>富文本默认上传返回url类型</li>
+                <li>新增自定义弹窗拖拽指令</li>
+                <li>全局注册常用通用组件</li>
+                <li>全局挂载字典标签组件</li>
+                <li>ImageUpload组件支持多图片上传</li>
+                <li>FileUpload组件支持多文件上传</li>
+                <li>文件上传组件添加数量限制属性</li>
+                <li>富文本编辑组件添加类型属性</li>
+                <li>富文本组件工具栏配置视频</li>
+                <li>封装通用iframe组件</li>
+                <li>限制超级管理员不允许操作</li>
+                <li>用户信息长度校验限制</li>
+                <li>分页组件新增pagerCount属性</li>
+                <li>添加bat脚本执行应用</li>
+                <li>升级oshi到最新版本v5.7.4</li>
+                <li>升级element-ui到最新版本2.15.2</li>
+                <li>升级pagehelper到最新版1.3.1</li>
+                <li>升级commons.io到最新版本v2.10.0</li>
+                <li>升级commons.fileupload到最新版本v1.4</li>
+                <li>升级swagger到最新版本v3.0.0</li>
+                <li>修复关闭confirm提示框控制台报错问题</li>
+                <li>修复存在的SQL注入漏洞问题</li>
+                <li>定时任务屏蔽rmi远程调用</li>
+                <li>修复用户搜索分页变量错误</li>
+                <li>修复导出角色数据范围翻译缺少仅本人</li>
+                <li>修复表单构建选择下拉选择控制台报错问题</li>
+                <li>优化图片工具类读取文件</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.5.0 - 2021-05-25">
+              <ol>
+                <li>新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)</li>
+                <li>布局设置支持保存&重置配置</li>
+                <li>修复树表数据显示不全&加载慢问题</li>
+                <li>新增IE浏览器版本过低提示页面</li>
+                <li>用户登录后记录最后登录IP&时间</li>
+                <li>页面导出按钮点击之后添加遮罩</li>
+                <li>富文本编辑器支持自定义上传地址</li>
+                <li>富文本编辑组件新增readOnly属性</li>
+                <li>页签TagsView新增关闭右侧功能</li>
+                <li>显隐列组件加载初始默认隐藏列</li>
+                <li>关闭头像上传窗口还原默认图片</li>
+                <li>个人信息添加手机&邮箱重复验证</li>
+                <li>代码生成模板导出按钮点击后添加遮罩</li>
+                <li>代码生成模板树表操作列添加新增按钮</li>
+                <li>代码生成模板修复主子表字段重名问题</li>
+                <li>升级fastjson到最新版1.2.76</li>
+                <li>升级druid到最新版本v1.2.6</li>
+                <li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>
+                <li>升级oshi到最新版本v5.6.0</li>
+                <li>velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞</li>
+                <li>数据监控页默认账户密码防止越权访问</li>
+                <li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
+                <li>修正后端导入表权限标识</li>
+                <li>修正前端操作日志&登录日志权限标识</li>
+                <li>设置Redis配置HashKey序列化</li>
+                <li>删除操作日志记录信息</li>
+                <li>上传媒体类型添加视频格式</li>
+                <li>修复请求形参未传值记录日志异常问题</li>
+                <li>优化xss校验json请求条件</li>
+                <li>树级结构更新子节点使用replaceFirst</li>
+                <li>优化ExcelUtil空值处理</li>
+                <li>日志记录过滤BindingResult对象,防止异常</li>
+                <li>修改主题后mini类型按钮无效问题</li>
+                <li>优化通用下载完成后删除节点</li>
+                <li>通用Controller添加响应返回消息</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.4.0 - 2021-02-22">
+              <ol>
+                <li>代码生成模板支持主子表</li>
+                <li>表格右侧工具栏组件支持显隐列</li>
+                <li>图片组件添加预览&移除功能</li>
+                <li>Excel注解支持Image图片导出</li>
+                <li>操作按钮组调整为朴素按钮样式</li>
+                <li>代码生成支持文件上传组件</li>
+                <li>代码生成日期控件区分范围</li>
+                <li>代码生成数据库文本类型生成表单文本域</li>
+                <li>用户手机邮箱&菜单组件修改允许空字符串</li>
+                <li>升级SpringBoot到最新版本2.2.13 提升启动速度</li>
+                <li>升级druid到最新版本v1.2.4</li>
+                <li>升级fastjson到最新版1.2.75</li>
+                <li>升级element-ui到最新版本2.15.0</li>
+                <li>修复IE11浏览器报错问题</li>
+                <li>优化多级菜单之间切换无法缓存的问题</li>
+                <li>修复四级菜单无法显示问题</li>
+                <li>修正侧边栏静态路由丢失问题</li>
+                <li>修复角色管理-编辑角色-功能权限显示异常</li>
+                <li>配置文件新增redis数据库索引属性</li>
+                <li>权限工具类增加admin判断</li>
+                <li>角色非自定义权限范围清空选择值</li>
+                <li>修复导入数据为负浮点数时丢失精度问题</li>
+                <li>移除path-to-regexp正则匹配插件</li>
+                <li>修复生成树表代码异常</li>
+                <li>修改ip字段长度防止ipv6地址长度不够</li>
+                <li>防止get请求参数值为false或0等特殊值会导致无法正确的传参</li>
+                <li>登录后push添加catch防止出现检查错误</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.3.0 - 2020-12-14">
+              <ol>
+                <li>新增缓存监控功能</li>
+                <li>支持主题风格配置</li>
+                <li>修复多级菜单之间切换无法缓存的问题</li>
+                <li>多级菜单自动配置组件</li>
+                <li>代码生成预览支持高亮显示</li>
+                <li>支持Get请求映射Params参数</li>
+                <li>删除用户和角色解绑关联</li>
+                <li>去除用户手机邮箱部门必填验证</li>
+                <li>Excel支持注解align对齐方式</li>
+                <li>Excel支持导入Boolean型数据</li>
+                <li>优化头像样式,鼠标移入悬停遮罩</li>
+                <li>代码生成预览提供滚动机制</li>
+                <li>代码生成删除多余的数字float类型</li>
+                <li>修正转换字符串的目标字符集属性</li>
+                <li>回显数据字典防止空值报错</li>
+                <li>日志记录增加过滤多文件场景</li>
+                <li>修改缓存Set方法可能导致嵌套的问题</li>
+                <li>移除前端一些多余的依赖</li>
+                <li>防止安全扫描YUI出现的风险提示</li>
+                <li>修改node-sass为dart-sass</li>
+                <li>升级SpringBoot到最新版本2.1.18</li>
+                <li>升级poi到最新版本4.1.2</li>
+                <li>升级oshi到最新版本v5.3.6</li>
+                <li>升级bitwalker到最新版本1.21</li>
+                <li>升级axios到最新版本0.21.0</li>
+                <li>升级element-ui到最新版本2.14.1</li>
+                <li>升级vue到最新版本2.6.12</li>
+                <li>升级vuex到最新版本3.6.0</li>
+                <li>升级vue-cli到版本4.5.9</li>
+                <li>升级vue-router到最新版本3.4.9</li>
+                <li>升级vue-cli到最新版本4.4.6</li>
+                <li>升级vue-cropper到最新版本0.5.5</li>
+                <li>升级clipboard到最新版本2.0.6</li>
+                <li>升级core-js到最新版本3.8.1</li>
+                <li>升级echarts到最新版本4.9.0</li>
+                <li>升级file-saver到最新版本2.0.4</li>
+                <li>升级fuse.js到最新版本6.4.3</li>
+                <li>升级js-beautify到最新版本1.13.0</li>
+                <li>升级js-cookie到最新版本2.2.1</li>
+                <li>升级path-to-regexp到最新版本6.2.0</li>
+                <li>升级quill到最新版本1.3.7</li>
+                <li>升级screenfull到最新版本5.0.2</li>
+                <li>升级sortablejs到最新版本1.10.2</li>
+                <li>升级vuedraggable到最新版本2.24.3</li>
+                <li>升级chalk到最新版本4.1.0</li>
+                <li>升级eslint到最新版本7.15.0</li>
+                <li>升级eslint-plugin-vue到最新版本7.2.0</li>
+                <li>升级lint-staged到最新版本10.5.3</li>
+                <li>升级runjs到最新版本4.4.2</li>
+                <li>升级sass-loader到最新版本10.1.0</li>
+                <li>升级script-ext-html-webpack-plugin到最新版本2.1.5</li>
+                <li>升级svg-sprite-loader到最新版本5.1.1</li>
+                <li>升级vue-template-compiler到最新版本2.6.12</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.2.1 - 2020-11-18">
+              <ol>
+                <li>阻止任意文件下载漏洞</li>
+                <li>代码生成支持上传控件</li>
+                <li>新增图片上传组件</li>
+                <li>调整默认首页</li>
+                <li>升级druid到最新版本v1.2.2</li>
+                <li>mapperLocations配置支持分隔符</li>
+                <li>权限信息调整</li>
+                <li>调整sql默认时间</li>
+                <li>解决代码生成没有bit类型的问题</li>
+                <li>升级pagehelper到最新版1.3.0</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v3.2.0 - 2020-10-10">
+              <ol>
+                <li>升级springboot版本到2.1.17 提升安全性</li>
+                <li>升级oshi到最新版本v5.2.5</li>
+                <li>升级druid到最新版本v1.2.1</li>
+                <li>升级jjwt到版本0.9.1</li>
+                <li>升级fastjson到最新版1.2.74</li>
+                <li>修改sass为node-sass,避免el-icon图标乱码</li>
+                <li>代码生成支持同步数据库</li>
+                <li>代码生成支持富文本控件</li>
+                <li>代码生成页面时不忽略remark属性</li>
+                <li>代码生成添加select必填选项</li>
+                <li>Excel导出类型NUMERIC支持精度浮点类型</li>
+                <li>Excel导出targetAttr优化获取值,防止get方法不规范</li>
+                <li>Excel注解支持自动统计数据总和</li>
+                <li>Excel注解支持设置BigDecimal精度&舍入规则</li>
+                <li>菜单&数据权限新增(展开/折叠 全选/全不选 父子联动)</li>
+                <li>允许用户分配到部门父节点</li>
+                <li>菜单新增是否缓存keep-alive</li>
+                <li>表格操作列间距调整</li>
+                <li>限制系统内置参数不允许删除</li>
+                <li>富文本组件优化,支持自定义高度&图片冲突问题</li>
+                <li>富文本工具栏样式对齐</li>
+                <li>导入excel整形值校验优化</li>
+                <li>修复页签关闭所有时固定标签路由不刷新问题</li>
+                <li>表单构建布局型组件新增按钮</li>
+                <li>左侧菜单文字过长显示省略号</li>
+                <li>修正根节点为子部门时,树状结构显示问题</li>
+                <li>修正调用目标字符串最大长度</li>
+                <li>修正菜单提示信息错误</li>
+                <li>修正定时任务执行一次权限标识</li>
+                <li>修正数据库字符串类型nvarchar</li>
+                <li>优化递归子节点</li>
+                <li>优化数据权限判断</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+
+            <el-collapse-item title="v3.1.0 - 2020-08-13">
+              <ol>
+                <li>表格工具栏右侧添加刷新&显隐查询组件</li>
+                <li>后端支持CORS跨域请求</li>
+                <li>代码生成支持选择上级菜单</li>
+                <li>代码生成支持自定义路径</li>
+                <li>代码生成支持复选框</li>
+                <li>Excel导出导入支持dictType字典类型</li>
+                <li>Excel支持分割字符串组内容</li>
+                <li>验证码类型支持(数组计算、字符验证)</li>
+                <li>升级vue-cli版本到4.4.4</li>
+                <li>修改 node-sass 为 dart-sass</li>
+                <li>表单类型为Integer/Long设置整形默认值</li>
+                <li>代码生成器默认mapper路径与默认mapperScan路径不一致</li>
+                <li>优化防重复提交拦截器</li>
+                <li>优化上级菜单不能选择自己</li>
+                <li>修复角色的权限分配后,未实时生效问题</li>
+                <li>修复在线用户日志记录类型</li>
+                <li>修复富文本空格和缩进保存后不生效问题</li>
+                <li>修复在线用户判断逻辑</li>
+                <li>唯一限制条件只返回单条数据</li>
+                <li>添加获取当前的环境配置方法</li>
+                <li>超时登录后页面跳转到首页</li>
+                <li>全局异常状态汉化拦截处理</li>
+                <li>HTML过滤器改为将html转义</li>
+                <li>检查字符支持小数点&降级改成异常提醒</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+
+            <el-collapse-item title="v3.0.0 - 2020-07-20">
+              <ol>
+                <li>单应用调整为多模块项目</li>
+                <li>升级element-ui版本到2.13.2</li>
+                <li>删除babel,提高编译速度。</li>
+                <li>新增菜单默认主类目</li>
+                <li>编码文件名修改为uuid方式</li>
+                <li>定时任务cron表达式验证</li>
+                <li>角色权限修改时已有权限未自动勾选异常修复</li>
+                <li>防止切换权限用户后登录出现404</li>
+                <li>Excel支持sort导出排序</li>
+                <li>创建用户不允许选择超级管理员角色</li>
+                <li>修复代码生成导入表结构出现异常页面不提醒问题</li>
+                <li>修复代码生成点击多次表修改数据不变化的问题</li>
+                <li>修复头像上传成功二次打开无法改变裁剪框大小和位置问题</li>
+                <li>修复布局为small者mini用户表单显示错位问题</li>
+                <li>修复热部署导致的强换异常问题</li>
+                <li>修改用户管理复选框宽度,防止部分浏览器出现省略号</li>
+                <li>IpUtils工具,清除Xss特殊字符,防止Xff注入攻击</li>
+                <li>生成domain 如果是浮点型 统一用BigDecimal</li>
+                <li>定时任务调整label-width,防止部署出现错位</li>
+                <li>调整表头固定列默认样式</li>
+                <li>代码生成模板调整,字段为String并且必填则加空串条件</li>
+                <li>代码生成字典Integer/Long使用parseInt</li>
+                <li>
+                  修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
+                </li>
+                <li>修正岗位导出权限注解</li>
+                <li>禁止加密密文返回前端</li>
+                <li>修复代码生成页面中的查询条件创建时间未生效的问题</li>
+                <li>修复首页搜索菜单外链无法点击跳转问题</li>
+                <li>修复菜单管理选择图标,backspace删除时不过滤数据</li>
+                <li>用户管理部门分支节点不可检查&显示计数</li>
+                <li>数据范围过滤属性调整</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+
+            <el-collapse-item title="v2.3.0 - 2020-06-01">
+              <ol>
+                <li>升级fastjson到最新版1.2.70 修复高危安全漏洞</li>
+                <li>dev启动默认打开浏览器</li>
+                <li>vue-cli使用默认source-map</li>
+                <li>slidebar eslint报错优化</li>
+                <li>当tags-view滚动关闭右键菜单</li>
+                <li>字典管理添加缓存读取</li>
+                <li>参数管理支持缓存操作</li>
+                <li>支持一级菜单(和主页同级)在main区域显示</li>
+                <li>限制外链地址必须以http(s)开头</li>
+                <li>tagview & sidebar 主题颜色与element ui(全局)同步</li>
+                <li>修改数据源类型优先级,先根据方法,再根据类</li>
+                <li>支持是否需要设置token属性,自定义返回码消息。</li>
+                <li>swagger请求前缀加入配置。</li>
+                <li>登录地点设置内容过长则隐藏显示</li>
+                <li>修复定时任务执行一次按钮后不提示消息问题</li>
+                <li>修改上级部门(选择项排除本身和下级)</li>
+                <li>通用http发送方法增加参数 contentType 编码类型</li>
+                <li>更换IP地址查询接口</li>
+                <li>修复页签变量undefined</li>
+                <li>添加校验部门包含未停用的子部门</li>
+                <li>修改定时任务详情下次执行时间日期显示错误</li>
+                <li>角色管理查询设置默认排序字段</li>
+                <li>swagger添加enable参数控制是否启用</li>
+                <li>只对json类型请求构建可重复读取inputStream的request</li>
+                <li>修改代码生成字典字段int类型没有自动选中问题</li>
+                <li>vuex用户名取值修正</li>
+                <li>表格树模板去掉多余的)</li>
+                <li>代码生成序号修正</li>
+                <li>全屏情况下不调整上外边距</li>
+                <li>代码生成Date字段添加默认格式</li>
+                <li>用户管理角色选择权限控制</li>
+                <li>修复路由懒加载报错问题</li>
+                <li>模板sql.vm添加菜单状态</li>
+                <li>设置用户名称不能修改</li>
+                <li>dialog添加append-to-body属性,防止ie遮罩</li>
+                <li>菜单区分状态和显示隐藏功能</li>
+                <li>升级fastjson到最新版1.2.68 修复安全加固</li>
+                <li>修复代码生成如果选择字典类型缺失逗号问题</li>
+                <li>登录请求params更换为data,防止暴露url</li>
+                <li>日志返回时间格式处理</li>
+                <li>添加handle控制允许拖动的元素</li>
+                <li>布局设置点击扩大范围</li>
+                <li>代码生成列属性排序查询</li>
+                <li>代码生成列支持拖动排序</li>
+                <li>修复时间格式不支持ios问题</li>
+                <li>表单构建添加父级class,防止冲突</li>
+                <li>定时任务并发属性修正</li>
+                <li>角色禁用&菜单隐藏不查询权限</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+
+            <el-collapse-item title="v2.2.0 - 2020-03-18">
+              <ol>
+                <li>系统监控新增定时任务功能</li>
+                <li>添加一个打包Web工程bat</li>
+                <li>修复页签鼠标滚轮按下的时候,可以关闭不可关闭的tag</li>
+                <li>修复点击退出登录有时会无提示问题</li>
+                <li>修复防重复提交注解无效问题</li>
+                <li>修复通知公告批量删除异常问题</li>
+                <li>添加菜单时路由地址必填限制</li>
+                <li>代码生成字段描述可编辑</li>
+                <li>修复用户修改个人信息导致缓存不过期问题</li>
+                <li>个人信息创建时间获取正确属性值</li>
+                <li>操作日志详细显示正确类型</li>
+                <li>导入表单击行数据时选中对应的复选框</li>
+                <li>批量替换表前缀逻辑调整</li>
+                <li>固定重定向路径表达式</li>
+                <li>升级element-ui版本到2.13.0</li>
+                <li>操作日志排序调整</li>
+                <li>修复charts切换侧边栏或者缩放窗口显示bug</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+
+            <el-collapse-item title="v2.1.0 - 2020-02-24">
+              <ol>
+                <li>新增表单构建</li>
+                <li>代码生成支持树表结构</li>
+                <li>新增用户导入</li>
+                <li>修复动态加载路由页面刷新问题</li>
+                <li>修复地址开关无效问题</li>
+                <li>汉化错误提示页面</li>
+                <li>代码生成已知问题修改</li>
+                <li>修复多数据源下配置关闭出现异常处理</li>
+                <li>添加HTML过滤器,用于去除XSS漏洞隐患</li>
+                <li>修复上传头像控制台出现异常</li>
+                <li>修改用户管理分页不正确的问题</li>
+                <li>修复验证码记录提示错误</li>
+                <li>修复request.js缺少Message引用</li>
+                <li>修复表格时间为空出现的异常</li>
+                <li>添加Jackson日期反序列化时区配置</li>
+                <li>调整根据用户权限加载菜单数据树形结构</li>
+                <li>调整成功登录不恢复按钮,防止多次点击</li>
+                <li>修改用户个人资料同步缓存信息</li>
+                <li>修复页面同时出现el-upload和Editor不显示处理</li>
+                <li>修复在角色管理页修改菜单权限偶尔未选中问题</li>
+                <li>配置文件新增redis密码属性</li>
+                <li>设置mybatis全局的配置文件</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+
+            <el-collapse-item title="v2.0.0 - 2019-12-02">
+              <ol>
+                <li>新增代码生成</li>
+                <li>新增@RepeatSubmit注解,防止重复提交</li>
+                <li>新增菜单主目录添加/删除操作</li>
+                <li>日志记录过滤特殊对象,防止转换异常</li>
+                <li>修改代码生成路由脚本错误</li>
+                <li>用户上传头像实时同步缓存,无需重新登录</li>
+                <li>调整切换页签后不重新加载数据</li>
+                <li>添加jsencrypt实现参数的前端加密</li>
+                <li>系统退出删除用户缓存记录</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v1.1.0 - 2019-11-11">
+              <ol>
+                <li>新增在线用户管理</li>
+                <li>新增按钮组功能实现(批量删除、导出、清空)</li>
+                <li>新增查询条件重置按钮</li>
+                <li>新增Swagger全局Token配置</li>
+                <li>新增后端参数校验</li>
+                <li>修复字典管理页面的日期查询异常</li>
+                <li>修改时间函数命名防止冲突</li>
+                <li>去除菜单上级校验,默认为顶级</li>
+                <li>修复用户密码无法修改问题</li>
+                <li>修复菜单类型为按钮时不显示权限标识</li>
+                <li>其他细节优化</li>
+              </ol>
+            </el-collapse-item>
+            <el-collapse-item title="v1.0.0 - 2019-10-08">
+              <ol>
+                <li>若依前后端分离系统正式发布</li>
+              </ol>
+            </el-collapse-item>
+          </el-collapse>
+        </el-card>
+      </el-col>
+      <el-col :xs="24" :sm="24" :md="12" :lg="8">
+        <el-card class="update-log">
+          <div slot="header" class="clearfix">
+            <span>捐赠支持</span>
+          </div>
+          <div class="body">
+            <img
+              src="https://oscimg.oschina.net/oscnet/up-d6695f82666e5018f715c41cb7ee60d3b73.png"
+              alt="donate"
+              width="100%"
+            />
+            <span style="display: inline-block; height: 30px; line-height: 30px"
+              >你可以请作者喝杯咖啡表示鼓励</span
+            >
+          </div>
+        </el-card>
+      </el-col>
+    </el-row> -->
+  </div>
+</template>
+
+<script>
+export default {
+  name: "Index",
+  data() {
+    return {
+      // 版本号
+      version: "3.8.1",
+    };
+  },
+  methods: {
+    goTarget(href) {
+      window.open(href, "_blank");
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.home {
+  blockquote {
+    padding: 10px 20px;
+    margin: 0 0 20px;
+    font-size: 17.5px;
+    border-left: 5px solid #eee;
+  }
+  hr {
+    margin-top: 20px;
+    margin-bottom: 20px;
+    border: 0;
+    border-top: 1px solid #eee;
+  }
+  .col-item {
+    margin-bottom: 20px;
+  }
+
+  ul {
+    padding: 0;
+    margin: 0;
+  }
+
+  font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  color: #676a6c;
+  overflow-x: hidden;
+
+  ul {
+    list-style-type: none;
+  }
+
+  h4 {
+    margin-top: 0px;
+  }
+
+  h2 {
+    margin-top: 10px;
+    font-size: 26px;
+    font-weight: 100;
+  }
+
+  p {
+    margin-top: 10px;
+
+    b {
+      font-weight: 700;
+    }
+  }
+
+  .update-log {
+    ol {
+      display: block;
+      list-style-type: decimal;
+      margin-block-start: 1em;
+      margin-block-end: 1em;
+      margin-inline-start: 0;
+      margin-inline-end: 0;
+      padding-inline-start: 40px;
+    }
+  }
+}
+</style>
+

+ 8 - 8
src/views/introduction/introduction.vue

@@ -121,7 +121,7 @@
                                   </div>
                             </div>
                       </div>
-             
+
                 <div style='font-size: 1.8rem;
                             font-family: Microsoft YaHei;
                             font-weight: 400;
@@ -130,7 +130,7 @@
                             text-align:center'>启东市交通运输局组织架构</div>
 
              <div class="divtitle" style="margin-top:2rem"><div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;">铁路管理科简介</div></div>
-            
+
              <div style="display: inline-flex;padding-left:16rem;padding-top:3rem">
              <div style="font-size: 1.8rem;
                         font-family: Microsoft YaHei;
@@ -147,8 +147,8 @@
                         font-weight: 400;
                         color: #D6DEE7;
                         margin-left:10rem">
-                负责协调铁路建设过程中的矛盾和问题,协调处理铁路和地方建设关系; 
-                <br/><br/> 指导和协调全市铁路站场周边综合配套和开发建设工作; 
+                负责协调铁路建设过程中的矛盾和问题,协调处理铁路和地方建设关系;
+                <br/><br/> 指导和协调全市铁路站场周边综合配套和开发建设工作;
                 <br/><br/> 配合做好铁路运营方面的相关工作。
              </div>
              </div>
@@ -164,7 +164,7 @@ export default {
   name: "IntroductionIndex",
   data() {
     return {
-       
+
     };
   },
    components:{
@@ -174,13 +174,13 @@ export default {
 
   },
   methods: {
-   
+
   }
 };
 </script>
 
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -188,7 +188,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 .divcontent{
         background: url("~@/assets/images/home_icon/background.png") no-repeat;

+ 219 - 219
src/views/login.vue

@@ -1,219 +1,219 @@
-<template>
-  <div class="login">
-    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <h3 class="title">若依后台管理系统</h3>
-      <el-form-item prop="username">
-        <el-input
-          v-model="loginForm.username"
-          type="text"
-          auto-complete="off"
-          placeholder="账号"
-        >
-          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
-        </el-input>
-      </el-form-item>
-      <el-form-item prop="password">
-        <el-input
-          v-model="loginForm.password"
-          type="password"
-          auto-complete="off"
-          placeholder="密码"
-          @keyup.enter.native="handleLogin"
-        >
-          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
-        </el-input>
-      </el-form-item>
-      <el-form-item prop="code" v-if="captchaOnOff">
-        <el-input
-          v-model="loginForm.code"
-          auto-complete="off"
-          placeholder="验证码"
-          style="width: 63%"
-          @keyup.enter.native="handleLogin"
-        >
-          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
-        </el-input>
-        <div class="login-code">
-          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
-        </div>
-      </el-form-item>
-      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
-      <el-form-item style="width:100%;">
-        <el-button
-          :loading="loading"
-          size="medium"
-          type="primary"
-          style="width:100%;"
-          @click.native.prevent="handleLogin"
-        >
-          <span v-if="!loading">登 录</span>
-          <span v-else>登 录 中...</span>
-        </el-button>
-        <div style="float: right;" v-if="register">
-          <router-link class="link-type" :to="'/register'">立即注册</router-link>
-        </div>
-      </el-form-item>
-    </el-form>
-    <!--  底部  -->
-    <div class="el-login-footer">
-      <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
-    </div>
-  </div>
-</template>
-
-<script>
-import { getCodeImg } from "@/api/login";
-import Cookies from "js-cookie";
-import { encrypt, decrypt } from '@/utils/jsencrypt'
-
-export default {
-  name: "Login",
-  data() {
-    return {
-      codeUrl: "",
-      loginForm: {
-        username: "admin",
-        password: "admin123",
-        rememberMe: false,
-        code: "",
-        uuid: ""
-      },
-      loginRules: {
-        username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" }
-        ],
-        password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" }
-        ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
-      },
-      loading: false,
-      // 验证码开关
-      captchaOnOff: true,
-      // 注册开关
-      register: false,
-      redirect: undefined
-    };
-  },
-  watch: {
-    $route: {
-      handler: function(route) {
-        this.redirect = route.query && route.query.redirect;
-      },
-      immediate: true
-    }
-  },
-  created() {
-    this.getCode();
-    this.getCookie();
-  },
-  methods: {
-    getCode() {
-      getCodeImg().then(res => {
-        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
-        if (this.captchaOnOff) {
-          this.codeUrl = "data:image/gif;base64," + res.img;
-          this.loginForm.uuid = res.uuid;
-        }
-      });
-    },
-    getCookie() {
-      const username = Cookies.get("username");
-      const password = Cookies.get("password");
-      const rememberMe = Cookies.get('rememberMe')
-      this.loginForm = {
-        username: username === undefined ? this.loginForm.username : username,
-        password: password === undefined ? this.loginForm.password : decrypt(password),
-        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
-      };
-    },
-    handleLogin() {
-      this.$refs.loginForm.validate(valid => {
-        if (valid) {
-          this.loading = true;
-          if (this.loginForm.rememberMe) {
-            Cookies.set("username", this.loginForm.username, { expires: 30 });
-            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
-            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
-          } else {
-            Cookies.remove("username");
-            Cookies.remove("password");
-            Cookies.remove('rememberMe');
-          }
-          this.$store.dispatch("Login", this.loginForm).then(() => {
-            this.$router.push({ path: this.redirect || "/big" }).catch(()=>{});
-          }).catch(() => {
-            this.loading = false;
-            if (this.captchaOnOff) {
-              this.getCode();
-            }
-          });
-        }
-      });
-    }
-  }
-};
-</script>
-
-<style rel="stylesheet/scss" lang="scss">
-.login {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  height: 100%;
-  background-image: url("../assets/images/login-background.jpg");
-  background-size: cover;
-}
-.title {
-  margin: 0px auto 30px auto;
-  text-align: center;
-  color: #707070;
-}
-
-.login-form {
-  border-radius: 6px;
-  background: #ffffff;
-  width: 400px;
-  padding: 25px 25px 5px 25px;
-  .el-input {
-    height: 38px;
-    input {
-      height: 38px;
-    }
-  }
-  .input-icon {
-    height: 39px;
-    width: 14px;
-    margin-left: 2px;
-  }
-}
-.login-tip {
-  font-size: 13px;
-  text-align: center;
-  color: #bfbfbf;
-}
-.login-code {
-  width: 33%;
-  height: 38px;
-  float: right;
-  img {
-    cursor: pointer;
-    vertical-align: middle;
-  }
-}
-.el-login-footer {
-  height: 40px;
-  line-height: 40px;
-  position: fixed;
-  bottom: 0;
-  width: 100%;
-  text-align: center;
-  color: #fff;
-  font-family: Arial;
-  font-size: 12px;
-  letter-spacing: 1px;
-}
-.login-code-img {
-  height: 38px;
-}
-</style>
+<template>
+  <div class="login">
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
+      <h3 class="title">启东市铁路沿线综合治理信息化管理平台</h3>
+      <el-form-item prop="username">
+        <el-input
+          v-model="loginForm.username"
+          type="text"
+          auto-complete="off"
+          placeholder="账号"
+        >
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="loginForm.password"
+          type="password"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="loginForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleLogin"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="login-code">
+          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+        </div>
+      </el-form-item>
+      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleLogin"
+        >
+          <span v-if="!loading">登 录</span>
+          <span v-else>登 录 中...</span>
+        </el-button>
+        <div style="float: right;" v-if="register">
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        </div>
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-login-footer">
+      <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getCodeImg } from "@/api/login";
+import Cookies from "js-cookie";
+import { encrypt, decrypt } from '@/utils/jsencrypt'
+
+export default {
+  name: "Login",
+  data() {
+    return {
+      codeUrl: "",
+      loginForm: {
+        username: "admin",
+        password: "admin123",
+        rememberMe: false,
+        code: "",
+        uuid: ""
+      },
+      loginRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      // 验证码开关
+      captchaOnOff: true,
+      // 注册开关
+      register: false,
+      redirect: undefined
+    };
+  },
+  watch: {
+    $route: {
+      handler: function(route) {
+        this.redirect = route.query && route.query.redirect;
+      },
+      immediate: true
+    }
+  },
+  created() {
+    this.getCode();
+    this.getCookie();
+  },
+  methods: {
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
+        if (this.captchaOnOff) {
+          this.codeUrl = "data:image/gif;base64," + res.img;
+          this.loginForm.uuid = res.uuid;
+        }
+      });
+    },
+    getCookie() {
+      const username = Cookies.get("username");
+      const password = Cookies.get("password");
+      const rememberMe = Cookies.get('rememberMe')
+      this.loginForm = {
+        username: username === undefined ? this.loginForm.username : username,
+        password: password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+      };
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          if (this.loginForm.rememberMe) {
+            Cookies.set("username", this.loginForm.username, { expires: 30 });
+            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
+            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
+          } else {
+            Cookies.remove("username");
+            Cookies.remove("password");
+            Cookies.remove('rememberMe');
+          }
+          this.$store.dispatch("Login", this.loginForm).then(() => {
+            this.$router.push({ path: this.redirect || "/big" }).catch(()=>{});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          });
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+.login {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: center;
+  color: #707070;
+}
+
+.login-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 400px;
+  padding: 25px 25px 5px 25px;
+  .el-input {
+    height: 38px;
+    input {
+      height: 38px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.login-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.login-code {
+  width: 33%;
+  height: 38px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+  }
+}
+.el-login-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+.login-code-img {
+  height: 38px;
+}
+</style>

+ 19 - 19
src/views/public/index.vue

@@ -1,8 +1,8 @@
 <template>
 <div style="width:100%;height:100%;position:relative">
   <headerdiv ref="headerDiv" :currentindexP = currentindexNew></headerdiv>
-  <div style="display:fix;">
-  <div style="width:25%;height:100%;display: inline-flex;">
+  <div style="display: inline-flex;width:100%">
+  <div style="width:25%;height:100%;">
        <div style="width:100%">
             <div class="divtitle" style="margin-top:0.5rem">
                         <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
@@ -50,16 +50,16 @@
                 </div>
        </div>
   </div>
-  <div style="width:48%;height:95%;position:absolute;display: inline-flex;">
+  <div style="width:50%;height:100vh;">
       <mapdiv ref="mapdiv" style=""></mapdiv>
   </div>
-  <div style="width:25%;height:100%;margin-left:92rem;display: inline-flex;">
+  <div style="width:25%;height:100%;">
         <div style="width:100%;padding-left:1rem">
         <div class="divtitle" style="margin-top:1.5rem">
            <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">服务评价</div>
         </div>
-        
+
          <div id='pieChart' style="width:45rem;height:25rem"></div>
          <!-- <div id='lcChart' style="width:45rem;height:25rem"></div> -->
 
@@ -67,9 +67,9 @@
            <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">投诉数量</div>
         </div>
-        
+
         <div id='tsChart' style="width:45rem;height:25rem"></div>
-        
+
          <div class="divtitle" style="margin-top:1.5rem">
            <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">本月统计趋势数据</div>
@@ -84,8 +84,8 @@
     <div class="bottombg">
       <div class="item item2" @click="changeMapTab(1)"><div class="num">1123</div><div>静态资源</div></div>
       <div class="item item1 item2" @click="changeMapTab(2)"><div class="num">113</div><div>动态资源</div></div>
-      <div class="item item1 item2" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
-      <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div>
+      <div class="item item1" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
+      <!-- <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div> -->
     </div>
 
     <!-- <videodiv :cameracode="ccode" style="width:700px;height:300px;position:absolute;top:100px;left:100px"></videodiv> -->
@@ -221,7 +221,7 @@ export default {
                                         offset: 1, color: '#122a61' // 100% 处的颜色
                                     }],
                                     global: false // 缺省为 false
-                                }},       
+                                }},
                                 itemStyle: {
                                     borderColor: "white"
                                     }
@@ -246,9 +246,9 @@ export default {
                         yAxis: {
                              name:"条",
                              nameTextStyle:{
-                                    color:"white", 
-                                    fontSize:16,  
-                                    //padding: [0, 0, 0, 1050] 
+                                    color:"white",
+                                    fontSize:16,
+                                    //padding: [0, 0, 0, 1050]
                                 },
                              axisLabel: {
                                             show: true,
@@ -334,7 +334,7 @@ export default {
         },
         tableRowClassName({ row, rowIndex }) {
                 if ((rowIndex + 1) % 2 === 0) {
-                    return "warning-row"; 
+                    return "warning-row";
                 } else {
                     return "success-row";
                 }
@@ -349,7 +349,7 @@ export default {
                        console.log(this.userList);
                        this.tdxjCount = data.data.xunTotalDistance;
                        this.tdcsCount = data.data.checkPointLogNum;
-                })  
+                })
         },
         initchart(){
               var myChart = this.$echarts.init(document.getElementById('gzhchart'));
@@ -434,9 +434,9 @@ export default {
                                 ]
                                 }
                             ]
-                        }; 
+                        };
                         myChart.setOption(option);
-               
+
         },
           getResource(){
                getResource({date:'2022-03-12'}).then(response =>{
@@ -463,7 +463,7 @@ export default {
                              bridgeArry.push(obj);
                          }else if(obj.areaType == '4'){
                              obj.name = obj.areaName
-                             railArry.push(obj);   
+                             railArry.push(obj);
                          }
                      }
                      for(var index in areaList){
@@ -498,7 +498,7 @@ export default {
                         var json = JSON.parse(data.data);
                          this.$refs.mapdiv.addPoints(json.data.list,'video.png',0.6,'video');
                   });
-              
+
          }
     }
 };

+ 10 - 10
src/views/qdtl/area/index.vue

@@ -39,7 +39,7 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-plus"
@@ -49,7 +49,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-edit"
@@ -60,7 +60,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-delete"
@@ -72,7 +72,7 @@
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="areaList" @selection-change="handleSelectionChange" stripe
+    <el-table  v-loading="loading" :data="areaList" @selection-change="handleSelectionChange" stripe
       class="my_table"
       :row-class-name="tableRowClassName"
       :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
@@ -196,7 +196,7 @@
                   </el-table-column>
                   <el-table-column label="经纬度" align="center" prop="lnglat" />
                   <el-table-column label="备注" align="center" prop="remark" />
-          </el-table>    
+          </el-table>
       </div>
     </el-dialog>
 
@@ -213,7 +213,7 @@
                 <el-table-column label="巡检设备" align="center" prop="deviceIds" />
                 <el-table-column label="所属区域" align="center" prop="areaId" />
                 <el-table-column label="备注" align="center" prop="remark" />
-            </el-table>  
+            </el-table>
       </div>
     </el-dialog>
   </div>
@@ -321,12 +321,12 @@ export default {
       }else{
           this.$refs.mapv.typeSelect="Point";
           this.$refs.mapv.changeAddInteractions();
-      } 
+      }
             // this.$refs.mapv.typeSelect="";
     },
     tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -487,7 +487,7 @@ export default {
 };
 </script>
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -495,7 +495,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 
 

+ 8 - 8
src/views/qdtl/area1/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <div class="title"><div style="padding-top:0.8rem;padding-left:3rem;font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;">{{title}}</div></div>
-     
+
     <div style="margin-top:1rem">
           <el-button style="width:8rem;height:3.2rem;" type="primary">新增</el-button>
 
@@ -163,7 +163,7 @@ export default {
      },
      tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -299,9 +299,9 @@ export default {
 
       .el-pagination__jump{
           color:#3DFFEA
-      }       
-      
-      .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next, .el-pagination.is-background .el-pager li {   
+      }
+
+      .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next, .el-pagination.is-background .el-pager li {
             background: #068583 20%;
             color: #0BC4F0;
       }
@@ -319,13 +319,13 @@ export default {
       .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{
            background: transparent;
            border: none;
-           color: #C5D0D4;
+           /* color: #C5D0D4; */
       }
 
       .el-table .el-table__body tr.el-table__row td.el-table__cell{
            background: transparent;
            border: none;
-           color: #C5D0D4;
+           /* color: #C5D0D4; */
       }
 
        .el-table .warning-row {
@@ -347,5 +347,5 @@ export default {
         .el-table::before {
           height: 0px;
         }
-         
+
 </style>

+ 6 - 6
src/views/qdtl/device/index.vue

@@ -39,7 +39,7 @@
     <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-plus"
@@ -49,7 +49,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-edit"
@@ -60,7 +60,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-delete"
@@ -356,7 +356,7 @@ export default {
     },
     tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -365,7 +365,7 @@ export default {
 };
 </script>
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -373,7 +373,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 
 

+ 514 - 0
src/views/qdtl/document/index.vue

@@ -0,0 +1,514 @@
+<template>
+  <div class="app-container" >
+      <!-- <div style="overflow:auto;height:100rem"> -->
+        <div class="divtitle">
+             <img src="@/assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
+            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">页眉</div>
+        </div>
+
+        <div style='margin-top:0em'>
+             <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="10rem" >
+                  <el-row style="">
+                        <el-col :span="12" style="padding-left:10rem">
+                            <el-form-item label="文头:" prop="wenTou">
+                                    <el-input
+                                    v-model="queryParams.wenTou"
+                                    placeholder="请输入文头"
+                                    clearable
+                                    size="small"
+                                    style="width:50rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                          <el-col :span="12">
+                            <el-form-item label="标题:" prop="title">
+                                    <el-input
+                                    v-model="queryParams.title"
+                                    placeholder="请输入标题"
+                                    clearable
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                   </el-row>
+                    <el-row style="">
+                        <el-col :span="12" style="padding-left:10rem">
+                            <el-form-item label="期数:" prop="periods">
+                                <div style="font-size:1.5rem;color:white;margin-left:3rem">
+                                     第
+                                    <el-input
+                                    v-model="queryParams.periods"
+                                    clearable
+                                    size="small"
+                                    style="width:10rem;margin-left:0.3rem"
+                                    />
+                                    期
+                                </div>
+                                </el-form-item>
+                            </el-col>
+                          <el-col :span="12">
+                            <el-form-item label="副标题:" prop="secondTitle">
+                                    <el-input
+                                    v-model="queryParams.secondTitle"
+                                    placeholder="请输入副标题"
+                                    clearable
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                   </el-row>
+                    <el-row style="">
+                        <el-col :span="12" style="padding-left:10rem">
+                            <el-form-item label="发文日期:" prop="publishDate">
+                                     <el-date-picker
+                                                v-model="queryParams.publishDate"
+                                                type="date"
+                                                placeholder="选择日期"
+                                                format="yyyy 年 MM 月 dd 日"
+                                                value-format="yyyy-MM-dd"
+                                                style="margin-left:3rem">
+                                    </el-date-picker>
+                                </el-form-item>
+                            </el-col>
+                   </el-row>
+
+             </el-form>
+        </div>
+
+        <div class="divtitle">
+             <img src="@/assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
+            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">正文内容</div>
+        </div>
+
+        <div style="padding-left:3rem;padding-top:5rem">
+              <div>
+                        <div style="font-size: 1.6rem;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: 400;
+                                    color: #FFFFFF;">一、市镇工作动态</div>
+                        <div>
+                                <div style='font-size: 1.6rem;
+                                            font-family: Microsoft YaHei;
+                                            font-weight: 400;
+                                            color: #FFFFFF;
+                                            margin-top:2rem'>市指挥中心动态</div>
+                                <div>
+                                    <el-input
+                                        type="textarea"
+                                        :rows="5"
+                                        placeholder="请输入200字以内的案例介绍"
+                                        v-model="queryParams.centerNews"
+                                        style="margin-top:2rem">
+                                        </el-input>
+                                </div>
+                                <div style='font-size: 1.6rem;
+                                            font-family: Microsoft YaHei;
+                                            font-weight: 400;
+                                            color: #FFFFFF;
+                                            margin-top:2rem'>区镇都动态</div>
+                                <div>
+                                    <el-input
+                                        type="textarea"
+                                        :rows="5"
+                                        placeholder="请输入200字以内的案例介绍"
+                                        v-model="queryParams.centerNews"
+                                        style="margin-top:2rem">
+                                        </el-input>
+                                </div>
+                        </div>
+              </div>
+              <div style="margin-top:2rem">
+                       <div style="font-size: 1.6rem;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: 400;
+                                    color: #FFFFFF;">二、典型案例</div>
+                        <div style="margin-top:1rem:padding-left:10rem">
+                              <el-form :model="exampleObj" ref="exampleForm" :inline="true" label-width="68px">
+                                        <el-form-item label="所属区域" prop="areaName">
+                                            <el-input
+                                            v-model="exampleObj.areaName"
+                                            clearable
+                                            size="small"
+                                            />
+                                        </el-form-item>
+                                        <el-form-item label="内容描述" prop="content">
+                                            <el-input
+                                            v-model="exampleObj.content"
+                                            clearable
+                                            size="small"
+                                            />
+                                        </el-form-item>
+                                         <el-form-item>
+                                            <el-button type="primary" size="mini" @click="addExample">增加</el-button>
+                                        </el-form-item>
+                              </el-form>
+                        </div>
+                        <div style="margin-top:0.1rem">
+                            <el-table v-loading="loading" :data="basicExampleList"  stripe
+                                        class="my_table"
+                                        :row-class-name="tableRowClassName"
+                                        :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
+                                        <el-table-column label="序号" align="center" type="index" />
+                                        <el-table-column label="所属区域" align="center" prop="areaName" />
+                                        <el-table-column label="内容描述" align="center" prop="content" />
+                                        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                                            <template slot-scope="scope">
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-edit"
+                                                @click="handleUpdate(scope.row)"
+                                                v-hasPermi="['qdtl:plan:edit']"
+                                            >修改</el-button>
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-delete"
+                                                @click="handleDelete(scope.row)"
+                                                v-hasPermi="['qdtl:plan:remove']"
+                                            >删除</el-button>
+                                            </template>
+                                        </el-table-column>
+                                </el-table>
+                         </div>
+              </div>
+
+               <div style="margin-top:2rem">
+                       <div style="font-size: 1.6rem;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: 400;
+                                    color: #FFFFFF;">三、专职巡防员巡防打卡情况</div>
+                        <div style="margin-top:1rem:padding-left:10rem">
+                              <el-form :model="exampleObj" ref="exampleForm" :inline="true" label-width="13rem">
+                                        <el-form-item label="巡防统计周期:" prop="dateArry">
+                                            <el-date-picker
+                                                v-model="dateArry"
+                                                type="daterange"
+                                                range-separator="至"
+                                                start-placeholder="开始日期"
+                                                end-placeholder="结束日期"
+                                                value-format="yyyy-MM-dd"
+                                                style="color:white">
+                                                </el-date-picker>
+                                        </el-form-item>
+                                         <el-form-item>
+                                            <el-button type="primary" size="mini" @click="addExample">确定</el-button>
+                                        </el-form-item>
+                              </el-form>
+                        </div>
+                        <div style="margin-top:0.1rem">
+                            <el-table v-loading="loading" :data="basicExampleList"  stripe
+                                        class="my_table"
+                                        :row-class-name="tableRowClassName"
+                                        :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
+                                        <el-table-column label="序号" align="center" type="index" />
+                                        <el-table-column label="所属区域" align="center" prop="areaName" />
+                                        <el-table-column label="内容描述" align="center" prop="content" />
+                                        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                                            <template slot-scope="scope">
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-edit"
+                                                @click="handleUpdate(scope.row)"
+                                                v-hasPermi="['qdtl:plan:edit']"
+                                            >修改</el-button>
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-delete"
+                                                @click="handleDelete(scope.row)"
+                                                v-hasPermi="['qdtl:plan:remove']"
+                                            >删除</el-button>
+                                            </template>
+                                        </el-table-column>
+                                </el-table>
+                         </div>
+              </div>
+
+               <div style="margin-top:2rem">
+                       <div style="font-size: 1.6rem;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: 400;
+                                    color: #FFFFFF;">四、存在问题</div>
+                        <div style="margin-top:1rem:padding-left:10rem">
+                              <el-form :model="questionObj" ref="exampleForm" :inline="true" label-width="68px">
+                                        <el-form-item label="所属区域" prop="areaName">
+                                            <el-input
+                                            v-model="questionObj.areaName"
+                                            clearable
+                                            size="small"
+                                            />
+                                        </el-form-item>
+                                        <el-form-item label="内容描述" prop="content">
+                                            <el-input
+                                            v-model="questionObj.content"
+                                            clearable
+                                            size="small"
+                                            />
+                                        </el-form-item>
+                                         <el-form-item>
+                                            <el-button type="primary" size="mini" @click="addQuestion">增加</el-button>
+                                        </el-form-item>
+                              </el-form>
+                        </div>
+                        <div style="margin-top:0.1rem">
+                            <el-table v-loading="loading" :data="questionList"  stripe
+                                        class="my_table"
+                                        :row-class-name="tableRowClassName"
+                                        :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
+                                        <el-table-column label="序号" align="center" type="index" />
+                                        <el-table-column label="所属区域" align="center" prop="areaName" />
+                                        <el-table-column label="内容描述" align="center" prop="content" />
+                                        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                                            <template slot-scope="scope">
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-edit"
+                                                @click="handleUpdate(scope.row)"
+                                                v-hasPermi="['qdtl:plan:edit']"
+                                            >修改</el-button>
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-delete"
+                                                @click="handleDelete(scope.row)"
+                                                v-hasPermi="['qdtl:plan:remove']"
+                                            >删除</el-button>
+                                            </template>
+                                        </el-table-column>
+                                </el-table>
+                         </div>
+              </div>
+
+               <div style="margin-top:2rem">
+                       <div style="font-size: 1.6rem;
+                                    font-family: Microsoft YaHei;
+                                    font-weight: 400;
+                                    color: #FFFFFF;">五、工作建议</div>
+                        <div style="margin-top:1rem:padding-left:10rem">
+                              <el-form :model="adviceObj" ref="exampleForm" :inline="true" label-width="68px">
+                                        <el-form-item label="所属区域" prop="areaName">
+                                            <el-input
+                                            v-model="adviceObj.areaName"
+                                            clearable
+                                            size="small"
+                                            />
+                                        </el-form-item>
+                                        <el-form-item label="内容描述" prop="content">
+                                            <el-input
+                                            v-model="adviceObj.content"
+                                            clearable
+                                            size="small"
+                                            />
+                                        </el-form-item>
+                                         <el-form-item>
+                                            <el-button type="primary" size="mini" @click="addAdvice">增加</el-button>
+                                        </el-form-item>
+                              </el-form>
+                        </div>
+                        <div style="margin-top:0.1rem">
+                            <el-table v-loading="loading" :data="adviceList"  stripe
+                                        class="my_table"
+                                        :row-class-name="tableRowClassName"
+                                        :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
+                                        <el-table-column label="序号" align="center" type="index" />
+                                        <el-table-column label="所属区域" align="center" prop="areaName" />
+                                        <el-table-column label="内容描述" align="center" prop="content" />
+                                        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                                            <template slot-scope="scope">
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-edit"
+                                                @click="handleUpdate(scope.row)"
+                                                v-hasPermi="['qdtl:plan:edit']"
+                                            >修改</el-button>
+                                            <el-button
+                                                size="mini"
+                                                type="text"
+                                                icon="el-icon-delete"
+                                                @click="handleDelete(scope.row)"
+                                                v-hasPermi="['qdtl:plan:remove']"
+                                            >删除</el-button>
+                                            </template>
+                                        </el-table-column>
+                                </el-table>
+                         </div>
+              </div>
+        </div>
+
+         <div class="divtitle" style="margin-top:2rem">
+             <img src="@/assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
+            <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:0.5rem">页尾</div>
+        </div>
+
+         <div style='margin-top:8em'>
+             <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="10rem" >
+                  <el-row style="">
+                        <el-col :span="12" style="padding-left:10rem">
+                            <el-form-item label="报送机关:" prop="baoSong">
+                                    <el-input
+                                    v-model="queryParams.baoSong"
+                                    placeholder="请输入报送机关"
+                                    clearable
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                          <el-col :span="12">
+                            <el-form-item label="抄送机关:" prop="chaoSong">
+                                    <el-input
+                                    v-model="queryParams.chaoSong"
+                                    placeholder="请输入抄送机关"
+                                    clearable
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                   </el-row>
+                    <el-row style="">
+                        <el-col :span="12" style="padding-left:10rem">
+                            <el-form-item label="统稿人:" prop="tongGao">
+                                    <el-input
+                                    v-model="queryParams.tongGao"
+                                    clearable
+                                    placeholder="请输入统稿人"
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                          <el-col :span="12">
+                            <el-form-item label="审核人:" prop="shenHe">
+                                    <el-input
+                                    v-model="queryParams.shenHe"
+                                    placeholder="请输入审核人"
+                                    clearable
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                   </el-row>
+                    <el-row style="">
+                        <el-col :span="12" style="padding-left:10rem">
+                            <el-form-item label="签发人:" prop="qianFa">
+                                    <el-input
+                                    v-model="queryParams.qianFa"
+                                    placeholder="请输入签发人"
+                                    clearable
+                                    size="small"
+                                    style="width:30rem;margin-left:3rem"
+                                    />
+                                </el-form-item>
+                            </el-col>
+                   </el-row>
+
+             </el-form>
+        </div>
+      <!-- </div> -->
+  </div>
+</template>
+
+<script>
+import { listDevice, getDevice, delDevice, addDevice, updateDevice } from "@/api/qdtl/device";
+import { listArea, getArea, delArea, addArea, updateArea } from "@/api/qdtl/area";
+import mapdiv from "@/components/map/index.vue"
+
+export default {
+  name: "Device",
+  dicts: ['tl_device_type'],
+  data() {
+    return {
+          queryParams:{},
+          basicExampleList:[
+                {areaName:'汇龙镇',content:'测试内容一'},
+                {areaName:'汇龙镇',content:'测试内容二'}
+          ],
+          questionList:[
+                {areaName:'汇龙镇',content:'1测试内容一'},
+                {areaName:'汇龙镇',content:'1测试内容二'}
+          ],
+          adviceList:[
+               {areaName:'汇龙镇',content:'2测试内容一'},
+               {areaName:'汇龙镇',content:'2测试内容二'}
+          ],
+          exampleObj:{
+              areaName:'',
+              content:''
+          },
+          questionObj:{
+              areaName:'',
+              content:''
+          },
+          adviceObj:{
+              areaName:'',
+              content:''
+          },
+          dateArry:[],
+    };
+  },
+  created() {
+    this.getList();
+    this.getAreaList();
+  },
+  components:{
+      mapdiv
+    },
+  methods: {
+       tableRowClassName({ row, rowIndex }) {
+            if ((rowIndex + 1) % 2 === 0) {
+                return "warning-row";
+            } else {
+                return "success-row";
+            }
+       },
+       addExample(){
+           this.basicExampleList.push(this.exampleObj);
+       },
+       addQuestion(){
+           this.questionList.push(this.questionObj);
+       },
+       addAdvice(){
+           this.adviceList.push(this.adviceObj);
+       }
+
+  }
+};
+</script>
+
+<style scoped>
+ .divtitle{
+          background: url("~@/assets/images/title2@2x.png") no-repeat;
+          background-size: cover;
+          width:100%;
+          height:3.9rem;
+          padding-top:0.8rem;
+          padding-left:2rem;
+          /* float: left; */
+          display: inline-flex;
+          margin-bottom: 3rem;
+       }
+ .el-textarea__inner{
+        color:white
+ }
+
+.app-container{
+      background: url("~@/assets/images/bg@2x.png") ;
+      background-size: 100% 100%;
+
+    background-repeat-y: repeat;
+    background-position: center;
+}
+
+.el-range-editor--medium .el-range-separator{
+     color: white
+}
+</style>
+

+ 2 - 2
src/views/qdtl/line/index.vue

@@ -495,7 +495,7 @@ export default {
 };
 </script>
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -503,7 +503,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 
  .titleFont{

+ 6 - 6
src/views/qdtl/location/index.vue

@@ -29,7 +29,7 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-plus"
@@ -39,7 +39,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-           style="width:8rem;height:3.2rem;" 
+           style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-edit"
@@ -50,7 +50,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-delete"
@@ -348,7 +348,7 @@ export default {
     },
         tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -362,7 +362,7 @@ export default {
 </script>
 
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -370,7 +370,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 
 

+ 8 - 8
src/views/qdtl/location1/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <div class="title"><div style="padding-top:0.8rem;padding-left:3rem;font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;">{{title}}</div></div>
-     
+
     <div style="margin-top:1rem">
           <el-button style="width:8rem;height:3.2rem;" type="primary">新增</el-button>
 
@@ -156,7 +156,7 @@ export default {
   methods: {
      tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -292,9 +292,9 @@ export default {
 
       .el-pagination__jump{
           color:#3DFFEA
-      }       
-      
-      .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next, .el-pagination.is-background .el-pager li {   
+      }
+
+      .el-pagination.is-background .btn-prev, .el-pagination.is-background .btn-next, .el-pagination.is-background .el-pager li {
             background: #068583 20%;
             color: #0BC4F0;
       }
@@ -312,13 +312,13 @@ export default {
       .el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{
            background: transparent;
            border: none;
-           color: #C5D0D4;
+           /* color: #C5D0D4; */
       }
 
       .el-table .el-table__body tr.el-table__row td.el-table__cell{
            background: transparent;
            border: none;
-           color: #C5D0D4;
+           /* color: #C5D0D4; */
       }
 
        .el-table .warning-row {
@@ -340,5 +340,5 @@ export default {
         .el-table::before {
           height: 0px;
         }
-         
+
 </style>

+ 5 - 5
src/views/qdtl/paiban/index.vue

@@ -43,7 +43,7 @@
     <!-- <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-plus"
@@ -53,7 +53,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-           style="width:8rem;height:3.2rem;" 
+           style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-edit"
@@ -64,7 +64,7 @@
       </el-col>
       <el-col :span="1.5">
         <el-button
-          style="width:8rem;height:3.2rem;" 
+          style="width:8rem;height:3.2rem;"
           type="primary"
           plain
           icon="el-icon-delete"
@@ -302,7 +302,7 @@ export default {
     },
         tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -316,7 +316,7 @@ export default {
 </script>
 
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;

+ 11 - 11
src/views/qdtl/plan/index.vue

@@ -260,7 +260,7 @@
                               @click="userDelete(scope.row)"
                             ></el-button>
                           </template>
-                        </el-table-column>  
+                        </el-table-column>
               </el-table>
           </div>
        </div>
@@ -319,7 +319,7 @@
                               @click="userDelete(scope.row)"
                             ></el-button>
                           </template>
-                        </el-table-column>  
+                        </el-table-column>
               </el-table>
           </div>
        </div>
@@ -486,7 +486,7 @@ export default {
                       }
                       if(obj.startDate.getTime() <= this.timeTable[index].startDate && obj.endDate.getTime() >= this.timeTable[index].endDate){
                                       return 3;
-                      } 
+                      }
               }
               return 0;
     },
@@ -582,7 +582,7 @@ export default {
       this.resetForm("form");
     },
     userDelete(data){
-        console.log(data); 
+        console.log(data);
         var selectUserArry = [];
         for(var index in this.selectUserList){
              if(this.selectUserList[index].userId == data.userId){
@@ -590,12 +590,12 @@ export default {
              }else{
                selectUserArry.push(this.selectUserList[index].userId);
              }
-        }   
+        }
         this.selectUser = selectUserArry
     },
     tableRowClassName({ row, rowIndex }) {
         if ((rowIndex + 1) % 2 === 0) {
-             return "warning-row"; 
+             return "warning-row";
         } else {
              return "success-row";
         }
@@ -627,10 +627,10 @@ export default {
           var s  = str.match(reg);
           var result="";
           if(s){
-              result = new Date(s[1],s[2] - 1,s[3],s[4],s[5],s[6]);                              
+              result = new Date(s[1],s[2] - 1,s[3],s[4],s[5],s[6]);
           }
           return result ;
-    },            
+    },
     /** 修改按钮操作 */
     handleUpdate(row) {
       this.reset();
@@ -757,7 +757,7 @@ export default {
 };
 </script>
 
-<style>
+<style scoped>
  .divtitle{
           background: url("~@/assets/images/title2@2x.png") no-repeat;
           background-size: 100% 100%;
@@ -765,7 +765,7 @@ export default {
           height:3.9rem;
           padding-top:0.8rem;
           padding-left:3rem;
-          float: left;
+          /* float: left; */
        }
 
  .titleFont{
@@ -774,4 +774,4 @@ export default {
         color: #3DFFEA;
         line-height: 3.6rem;
  }
-</style>
+</style>

+ 209 - 209
src/views/register.vue

@@ -1,209 +1,209 @@
-<template>
-  <div class="register">
-    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
-      <h3 class="title">若依后台管理系统</h3>
-      <el-form-item prop="username">
-        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
-          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
-        </el-input>
-      </el-form-item>
-      <el-form-item prop="password">
-        <el-input
-          v-model="registerForm.password"
-          type="password"
-          auto-complete="off"
-          placeholder="密码"
-          @keyup.enter.native="handleRegister"
-        >
-          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
-        </el-input>
-      </el-form-item>
-      <el-form-item prop="confirmPassword">
-        <el-input
-          v-model="registerForm.confirmPassword"
-          type="password"
-          auto-complete="off"
-          placeholder="确认密码"
-          @keyup.enter.native="handleRegister"
-        >
-          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
-        </el-input>
-      </el-form-item>
-      <el-form-item prop="code" v-if="captchaOnOff">
-        <el-input
-          v-model="registerForm.code"
-          auto-complete="off"
-          placeholder="验证码"
-          style="width: 63%"
-          @keyup.enter.native="handleRegister"
-        >
-          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
-        </el-input>
-        <div class="register-code">
-          <img :src="codeUrl" @click="getCode" class="register-code-img"/>
-        </div>
-      </el-form-item>
-      <el-form-item style="width:100%;">
-        <el-button
-          :loading="loading"
-          size="medium"
-          type="primary"
-          style="width:100%;"
-          @click.native.prevent="handleRegister"
-        >
-          <span v-if="!loading">注 册</span>
-          <span v-else>注 册 中...</span>
-        </el-button>
-        <div style="float: right;">
-          <router-link class="link-type" :to="'/login'">使用已有账户登录</router-link>
-        </div>
-      </el-form-item>
-    </el-form>
-    <!--  底部  -->
-    <div class="el-register-footer">
-      <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
-    </div>
-  </div>
-</template>
-
-<script>
-import { getCodeImg, register } from "@/api/login";
-
-export default {
-  name: "Register",
-  data() {
-    const equalToPassword = (rule, value, callback) => {
-      if (this.registerForm.password !== value) {
-        callback(new Error("两次输入的密码不一致"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      codeUrl: "",
-      registerForm: {
-        username: "",
-        password: "",
-        confirmPassword: "",
-        code: "",
-        uuid: ""
-      },
-      registerRules: {
-        username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" },
-          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
-        ],
-        password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" },
-          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
-        ],
-        confirmPassword: [
-          { required: true, trigger: "blur", message: "请再次输入您的密码" },
-          { required: true, validator: equalToPassword, trigger: "blur" }
-        ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
-      },
-      loading: false,
-      captchaOnOff: true
-    };
-  },
-  created() {
-    this.getCode();
-  },
-  methods: {
-    getCode() {
-      getCodeImg().then(res => {
-        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
-        if (this.captchaOnOff) {
-          this.codeUrl = "data:image/gif;base64," + res.img;
-          this.registerForm.uuid = res.uuid;
-        }
-      });
-    },
-    handleRegister() {
-      this.$refs.registerForm.validate(valid => {
-        if (valid) {
-          this.loading = true;
-          register(this.registerForm).then(res => {
-            const username = this.registerForm.username;
-            this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
-              dangerouslyUseHTMLString: true,
-              type: 'success'
-            }).then(() => {
-              this.$router.push("/login");
-            }).catch(() => {});
-          }).catch(() => {
-            this.loading = false;
-            if (this.captchaOnOff) {
-              this.getCode();
-            }
-          })
-        }
-      });
-    }
-  }
-};
-</script>
-
-<style rel="stylesheet/scss" lang="scss">
-.register {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  height: 100%;
-  background-image: url("../assets/images/login-background.jpg");
-  background-size: cover;
-}
-.title {
-  margin: 0px auto 30px auto;
-  text-align: center;
-  color: #707070;
-}
-
-.register-form {
-  border-radius: 6px;
-  background: #ffffff;
-  width: 400px;
-  padding: 25px 25px 5px 25px;
-  .el-input {
-    height: 38px;
-    input {
-      height: 38px;
-    }
-  }
-  .input-icon {
-    height: 39px;
-    width: 14px;
-    margin-left: 2px;
-  }
-}
-.register-tip {
-  font-size: 13px;
-  text-align: center;
-  color: #bfbfbf;
-}
-.register-code {
-  width: 33%;
-  height: 38px;
-  float: right;
-  img {
-    cursor: pointer;
-    vertical-align: middle;
-  }
-}
-.el-register-footer {
-  height: 40px;
-  line-height: 40px;
-  position: fixed;
-  bottom: 0;
-  width: 100%;
-  text-align: center;
-  color: #fff;
-  font-family: Arial;
-  font-size: 12px;
-  letter-spacing: 1px;
-}
-.register-code-img {
-  height: 38px;
-}
-</style>
+<template>
+  <div class="register">
+    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
+      <h3 class="title">启东市铁路沿线综合治理信息化管理平台</h3>
+      <el-form-item prop="username">
+        <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
+          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input
+          v-model="registerForm.password"
+          type="password"
+          auto-complete="off"
+          placeholder="密码"
+          @keyup.enter.native="handleRegister"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="confirmPassword">
+        <el-input
+          v-model="registerForm.confirmPassword"
+          type="password"
+          auto-complete="off"
+          placeholder="确认密码"
+          @keyup.enter.native="handleRegister"
+        >
+          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="code" v-if="captchaOnOff">
+        <el-input
+          v-model="registerForm.code"
+          auto-complete="off"
+          placeholder="验证码"
+          style="width: 63%"
+          @keyup.enter.native="handleRegister"
+        >
+          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+        </el-input>
+        <div class="register-code">
+          <img :src="codeUrl" @click="getCode" class="register-code-img"/>
+        </div>
+      </el-form-item>
+      <el-form-item style="width:100%;">
+        <el-button
+          :loading="loading"
+          size="medium"
+          type="primary"
+          style="width:100%;"
+          @click.native.prevent="handleRegister"
+        >
+          <span v-if="!loading">注 册</span>
+          <span v-else>注 册 中...</span>
+        </el-button>
+        <div style="float: right;">
+          <router-link class="link-type" :to="'/login'">使用已有账户登录</router-link>
+        </div>
+      </el-form-item>
+    </el-form>
+    <!--  底部  -->
+    <div class="el-register-footer">
+      <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
+    </div>
+  </div>
+</template>
+
+<script>
+import { getCodeImg, register } from "@/api/login";
+
+export default {
+  name: "Register",
+  data() {
+    const equalToPassword = (rule, value, callback) => {
+      if (this.registerForm.password !== value) {
+        callback(new Error("两次输入的密码不一致"));
+      } else {
+        callback();
+      }
+    };
+    return {
+      codeUrl: "",
+      registerForm: {
+        username: "",
+        password: "",
+        confirmPassword: "",
+        code: "",
+        uuid: ""
+      },
+      registerRules: {
+        username: [
+          { required: true, trigger: "blur", message: "请输入您的账号" },
+          { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
+        ],
+        password: [
+          { required: true, trigger: "blur", message: "请输入您的密码" },
+          { min: 5, max: 20, message: '用户密码长度必须介于 5 和 20 之间', trigger: 'blur' }
+        ],
+        confirmPassword: [
+          { required: true, trigger: "blur", message: "请再次输入您的密码" },
+          { required: true, validator: equalToPassword, trigger: "blur" }
+        ],
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+      },
+      loading: false,
+      captchaOnOff: true
+    };
+  },
+  created() {
+    this.getCode();
+  },
+  methods: {
+    getCode() {
+      getCodeImg().then(res => {
+        this.captchaOnOff = res.captchaOnOff === undefined ? true : res.captchaOnOff;
+        if (this.captchaOnOff) {
+          this.codeUrl = "data:image/gif;base64," + res.img;
+          this.registerForm.uuid = res.uuid;
+        }
+      });
+    },
+    handleRegister() {
+      this.$refs.registerForm.validate(valid => {
+        if (valid) {
+          this.loading = true;
+          register(this.registerForm).then(res => {
+            const username = this.registerForm.username;
+            this.$alert("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
+              dangerouslyUseHTMLString: true,
+              type: 'success'
+            }).then(() => {
+              this.$router.push("/login");
+            }).catch(() => {});
+          }).catch(() => {
+            this.loading = false;
+            if (this.captchaOnOff) {
+              this.getCode();
+            }
+          })
+        }
+      });
+    }
+  }
+};
+</script>
+
+<style rel="stylesheet/scss" lang="scss">
+.register {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  height: 100%;
+  background-image: url("../assets/images/login-background.jpg");
+  background-size: cover;
+}
+.title {
+  margin: 0px auto 30px auto;
+  text-align: center;
+  color: #707070;
+}
+
+.register-form {
+  border-radius: 6px;
+  background: #ffffff;
+  width: 400px;
+  padding: 25px 25px 5px 25px;
+  .el-input {
+    height: 38px;
+    input {
+      height: 38px;
+    }
+  }
+  .input-icon {
+    height: 39px;
+    width: 14px;
+    margin-left: 2px;
+  }
+}
+.register-tip {
+  font-size: 13px;
+  text-align: center;
+  color: #bfbfbf;
+}
+.register-code {
+  width: 33%;
+  height: 38px;
+  float: right;
+  img {
+    cursor: pointer;
+    vertical-align: middle;
+  }
+}
+.el-register-footer {
+  height: 40px;
+  line-height: 40px;
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  text-align: center;
+  color: #fff;
+  font-family: Arial;
+  font-size: 12px;
+  letter-spacing: 1px;
+}
+.register-code-img {
+  height: 38px;
+}
+</style>

+ 14 - 14
src/views/safe/index.vue

@@ -1,8 +1,8 @@
 <template>
 <div style="width:100%;height:100%;position:relative">
   <headerdiv ref="headerDiv" :currentindexP = currentindexNew></headerdiv>
-  <div style="display:fix;">
-  <div style="width:25%;height:100%;display: inline-flex;">
+  <div style="display: inline-flex;">
+  <div style="width:25%;height:100%;">
        <div style="width:100%">
        <div class="divtitle" style="margin-top:0.5rem">
                 <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
@@ -49,10 +49,10 @@
 
 
   </div>
-  <div style="width:48%;height:95%;position:absolute;display: inline-flex;">
+  <div style="width:50%;height:100vh">
       <mapdiv ref="mapdiv" style=""></mapdiv>
   </div>
-  <div style="width:25%;height:100%;margin-left:92rem;display: inline-flex;">
+  <div style="width:25%;height:100%;">
         <div style="width:100%;padding-left:1rem">
         <div class="divtitle" style="margin-top:1.5rem">
            <img src="../../assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
@@ -100,7 +100,7 @@
                     </div>
               </div>
         </div>
-        
+
         <div class='pieChart' style='margin-top:5rem'></div>
          <!-- <div id='lcChart' style="width:45rem;height:25rem"></div> -->
 
@@ -119,8 +119,8 @@
     <div class="bottombg">
       <div class="item item2" @click="changeMapTab(1)"><div class="num">1123</div><div>静态资源</div></div>
       <div class="item item1 item2" @click="changeMapTab(2)"><div class="num">113</div><div>动态资源</div></div>
-      <div class="item item1 item2" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
-      <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div>
+      <div class="item item1" @click="changeMapTab(3)"><div class="num">531</div><div>重点区域</div></div>
+      <!-- <div class="item"><div class="num" @click="changeMapTab(4)">16</div><div>实时告警</div></div> -->
     </div>
 
     <!-- <videodiv :cameracode="ccode" style="width:700px;height:300px;position:absolute;top:100px;left:100px"></videodiv> -->
@@ -211,7 +211,7 @@ export default {
         },
         tableRowClassName({ row, rowIndex }) {
                 if ((rowIndex + 1) % 2 === 0) {
-                    return "warning-row"; 
+                    return "warning-row";
                 } else {
                     return "success-row";
                 }
@@ -226,7 +226,7 @@ export default {
                        console.log(this.userList);
                        this.tdxjCount = data.data.xunTotalDistance;
                        this.tdcsCount = data.data.checkPointLogNum;
-                })  
+                })
         },
         initchart(){
               var myChart = this.$echarts.init(document.getElementById('yjchart'));
@@ -316,9 +316,9 @@ export default {
                                 ]
                                 }
                             ]
-                        }; 
+                        };
                         myChart.setOption(option);
-               
+
         },
           getResource(){
                getResource({date:'2022-03-12'}).then(response =>{
@@ -345,7 +345,7 @@ export default {
                              bridgeArry.push(obj);
                          }else if(obj.areaType == '4'){
                              obj.name = obj.areaName
-                             railArry.push(obj);   
+                             railArry.push(obj);
                          }
                      }
                      for(var index in areaList){
@@ -380,13 +380,13 @@ export default {
                         var json = JSON.parse(data.data);
                          this.$refs.mapdiv.addPoints(json.data.list,'video.png',0.6,'video');
                   });
-              
+
          }
     }
 };
 </script>
 
-<style rel="stylesheet/scss" lang="scss">
+<style rel="stylesheet/scss" lang="scss" scoped>
  .divtitle{
           background: url("~@/assets/images/title@2x.png") no-repeat;
           background-size: 100% 100%;

+ 6 - 5
vue.config.js

@@ -9,7 +9,8 @@ const CompressionPlugin = require('compression-webpack-plugin')
 
 const CopyWebpackPlugin = require('copy-webpack-plugin');
 
-const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
+const name =
+    "启东市铁路沿线综合治理信息化管理平台"; // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口
 
@@ -62,9 +63,9 @@ module.exports = {
         },
         plugins: [
             new CopyWebpackPlugin([
-                { from: 'node_modules/@liveqing/liveplayer/dist/component/crossdomain.xml'},
-                { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'js/'},
-                { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf'}
+                { from: 'node_modules/@liveqing/liveplayer/dist/component/crossdomain.xml' },
+                { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'js/' },
+                { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf' }
             ]),
             // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
             new CompressionPlugin({
@@ -138,4 +139,4 @@ module.exports = {
                 }
             )
     }
-}
+}