This commit is contained in:
lcw
2025-08-01 17:16:03 +08:00
parent 42e9bd894c
commit 2b06febd8e
18 changed files with 1615 additions and 369 deletions

148
package-lock.json generated
View File

@ -1457,12 +1457,12 @@
}, },
"@paddlejs/paddlejs-backend-webgl": { "@paddlejs/paddlejs-backend-webgl": {
"version": "1.2.9", "version": "1.2.9",
"resolved": "https://registry.npmmirror.com/@paddlejs/paddlejs-backend-webgl/-/paddlejs-backend-webgl-1.2.9.tgz", "resolved": "https://registry.npmjs.org/@paddlejs/paddlejs-backend-webgl/-/paddlejs-backend-webgl-1.2.9.tgz",
"integrity": "sha512-cVDa0/Wbw2EyfsYqdYUPhFeqKsET79keEUWjyhYQmQkJfWg8j1qdR6yp7g6nx9qAGrqFvwuj1s0EqkYA1dok6A==" "integrity": "sha512-cVDa0/Wbw2EyfsYqdYUPhFeqKsET79keEUWjyhYQmQkJfWg8j1qdR6yp7g6nx9qAGrqFvwuj1s0EqkYA1dok6A=="
}, },
"@paddlejs/paddlejs-core": { "@paddlejs/paddlejs-core": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmmirror.com/@paddlejs/paddlejs-core/-/paddlejs-core-2.2.0.tgz", "resolved": "https://registry.npmjs.org/@paddlejs/paddlejs-core/-/paddlejs-core-2.2.0.tgz",
"integrity": "sha512-P3rPkF9fFHtq8uSte5gA7fJQwBNl9Ytsvj6aTcfQSsirnBO/HxMNu0gJyh7+lItvEtF92PR15eI0eOwJYfZDhQ==" "integrity": "sha512-P3rPkF9fFHtq8uSte5gA7fJQwBNl9Ytsvj6aTcfQSsirnBO/HxMNu0gJyh7+lItvEtF92PR15eI0eOwJYfZDhQ=="
}, },
"@petamoriken/float16": { "@petamoriken/float16": {
@ -2134,51 +2134,6 @@
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true "dev": true
}, },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"ssri": { "ssri": {
"version": "8.0.1", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
@ -2187,28 +2142,6 @@
"requires": { "requires": {
"minipass": "^3.1.1" "minipass": "^3.1.1"
} }
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
}
} }
} }
}, },
@ -3368,7 +3301,7 @@
}, },
"blueimp-canvas-to-blob": { "blueimp-canvas-to-blob": {
"version": "3.29.0", "version": "3.29.0",
"resolved": "https://registry.npmmirror.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz", "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz",
"integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg==" "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg=="
}, },
"bmp-js": { "bmp-js": {
@ -6969,7 +6902,7 @@
}, },
"file-saver": { "file-saver": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz", "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
}, },
"file-uri-to-path": { "file-uri-to-path": {
@ -7949,7 +7882,7 @@
}, },
"image-compressor.js": { "image-compressor.js": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmmirror.com/image-compressor.js/-/image-compressor.js-1.1.4.tgz", "resolved": "https://registry.npmjs.org/image-compressor.js/-/image-compressor.js-1.1.4.tgz",
"integrity": "sha512-DF1YFSw+m6FqpXsleD4+q9eu/wFFkm8sHuYhgYy5GWFVencXeuB1/UqC12xz+dCZooPetf5LIb8JOGkgEWmlcg==", "integrity": "sha512-DF1YFSw+m6FqpXsleD4+q9eu/wFFkm8sHuYhgYy5GWFVencXeuB1/UqC12xz+dCZooPetf5LIb8JOGkgEWmlcg==",
"requires": { "requires": {
"blueimp-canvas-to-blob": "^3.14.0", "blueimp-canvas-to-blob": "^3.14.0",
@ -8321,7 +8254,7 @@
}, },
"is-blob": { "is-blob": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/is-blob/-/is-blob-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-1.0.0.tgz",
"integrity": "sha512-QIZDHQZpRfMEZwSTD7egdNZS7H/awVW9FZ3yJv+gg1z8d8GPXEs76QWL67fZs2BoBqp2dGtamTJpEYFJHmD73g==" "integrity": "sha512-QIZDHQZpRfMEZwSTD7egdNZS7H/awVW9FZ3yJv+gg1z8d8GPXEs76QWL67fZs2BoBqp2dGtamTJpEYFJHmD73g=="
}, },
"is-boolean-object": { "is-boolean-object": {
@ -15121,6 +15054,75 @@
} }
} }
}, },
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-router": { "vue-router": {
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz",

View File

@ -3,261 +3,306 @@
-webkit-background-clip: text; -webkit-background-clip: text;
-webkit-text-fill-color: transparent; -webkit-text-fill-color: transparent;
} }
.homeBox{
.homeBox {
width: 100%;
height: 100vh;
.home-aside {
position: relative;
width: 442px;
top: 70px;
height: 100%;
height: calc(100vh - 72px);
overflow: hidden;
z-index: 10;
.asideTitle {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 10px;
box-sizing: border-box;
background: linear-gradient(90deg, #124CB3 0%, rgba(18, 76, 179, 0.23) 77%, rgba(18, 76, 179, 0) 100%);
border-radius: 0px 0px 0px 0px;
height: 40px;
.title {
font-weight: bold;
font-size: 16px;
color: #FFFFFF;
margin-right: 20px;
}
}
.asideCnt {
height: calc(100% - 40px);
}
.aside-middle {
height: calc(100%/2);
padding: 4px;
box-sizing: border-box;
}
}
.homeBtn {
height: 302px;
width: calc(100% - 894px);
position: absolute;
bottom: 2px;
left: 50%;
transform: translateX(-50%);
}
// 头部
.headBox {
position: fixed;
top: 0;
width: 100%; width: 100%;
height: 100vh; height: 70px;
.home-aside{ background: rgba(0, 0, 0, 0.8);
position: relative; z-index: 2;
width: 442px;
top: 70px; .headBoxBg {
width: 100%;
height: 100%; height: 100%;
height: calc(100vh - 72px); background: url("~@/assets/images/home_head.png") no-repeat center center;
overflow: hidden; background-size: 100% 100%;
z-index: 10; height: 151px;
.asideTitle{ }
.top-center {
position: absolute;
left: 50%;
top: 2%;
transform: translateX(-50%);
font-size: 56px;
letter-spacing: 2px;
font-family: "YSBTH";
white-space: nowrap;
background: linear-gradient(180deg, #FFFFFF 0%, #66B5FF 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 4px 4px 4px rgba(54, 255, 243, 0.15);
}
.topBtn {
display: flex;
position: absolute;
top: 22px;
.topBtn-item {
width: 190px;
height: 38px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: center;
padding: 0 10px; background: url("~@/assets/images/home_btns.png") no-repeat center center;
box-sizing: border-box;
background: linear-gradient( 90deg, #124CB3 0%, rgba(18,76,179,0.23) 77%, rgba(18,76,179,0) 100%);
border-radius: 0px 0px 0px 0px;
height: 40px;
.title{
font-weight: bold;
font-size: 16px;
color: #FFFFFF;
margin-right: 20px;
}
}
.asideCnt{
height: calc(100% - 40px);
}
.aside-middle{
height: calc(100%/2);
padding: 4px;
box-sizing: border-box;
}
}
.homeBtn{
height: 302px;
width: calc(100% - 894px);
position: absolute;
bottom: 2px;
left: 50%;
transform: translateX(-50%);
}
// 头部
.headBox {
position: fixed;
top: 0;
width: 100%;
height: 70px;
background: rgba(0,0,0,0.8);
z-index: 2;
.headBoxBg{
width: 100%;
height: 100%;
background: url("~@/assets/images/home_head.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
height: 151px; font-size: 18px;
} cursor: pointer;
.top-center {
position: absolute; span {
left: 50%;
top: 2%;
transform: translateX(-50%);
font-size: 56px;
letter-spacing: 2px;
font-family: "YSBTH";
white-space: nowrap;
background: linear-gradient(180deg, #FFFFFF 0%, #66B5FF 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 4px 4px 4px rgba(54, 255, 243, 0.15);
}
.topBtn {
display: flex;
position: absolute;
top: 22px;
.topBtn-item {
width: 190px;
height: 38px;
display: flex;
align-items: center;
justify-content: center;
background: url("~@/assets/images/home_btns.png") no-repeat center center;
background-size: 100% 100%;
font-size: 18px;
cursor: pointer;
span {
font-family: "YSBTH";
margin-top: -4px;
@include textColor(#a1d6ff, #ffffff);
}
}
}
.topBtn-left {
left: 30px;
font-size: 12px;
.text {
font-family: "YSBTH"; font-family: "YSBTH";
color: #0bb7ff; margin-top: -4px;
}
.tests {
color: #0a99ff;
}
}
.leftBtn-yjbtn{
position: absolute;
left: 360px;
top: 20px;
.leftBtn-item{
width: 155px;
height: 38px;
line-height: 38px;
text-align: center;
background: url("~@/assets/images/home_btns.png") no-repeat center center;
background-size: 100% 100%;
font-size: 16px;
font-family: "YSBTH";
}
.btms{
@include textColor(#a1d6ff, #ffffff); @include textColor(#a1d6ff, #ffffff);
} }
} }
.yjbtnActive{
background: url("~@/assets/images/home_btns_active.png") no-repeat center center; }
.topBtn-left {
left: 30px;
font-size: 12px;
.text {
font-family: "YSBTH";
color: #0bb7ff;
}
.tests {
color: #0a99ff;
}
}
.leftBtn-yjbtn {
position: absolute;
left: 360px;
top: 20px;
.leftBtn-item {
width: 155px;
height: 38px;
line-height: 38px;
text-align: center;
background: url("~@/assets/images/home_btns.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
.btms{ font-size: 16px;
font-family: "YSBTH";
}
.btms {
@include textColor(#a1d6ff, #ffffff);
}
}
.yjbtnActive {
background: url("~@/assets/images/home_btns_active.png") no-repeat center center;
background-size: 100% 100%;
.btms {
@include textColor(#00ffff, #faff00);
}
}
.topBtn-right {
right: 270px;
top: 22px;
.topBtn-item {
background: url("~@/assets/images/home_btns_right.png") no-repeat center center;
background-size: 100% 100%;
}
.active-topBtn {
background: url("~@/assets/images/home_btns_right_active.png") no-repeat center center;
background-size: 100% 100%;
span {
@include textColor(#00ffff, #faff00); @include textColor(#00ffff, #faff00);
} }
} }
.topBtn-right {
right: 270px;
top: 22px;
.topBtn-item {
background: url("~@/assets/images/home_btns_right.png") no-repeat center
center;
background-size: 100% 100%;
}
.active-topBtn {
background: url("~@/assets/images/home_btns_right_active.png") no-repeat
center center;
background-size: 100% 100%;
span {
@include textColor(#00ffff, #faff00);
}
}
}
.rightIcon {
position: absolute;
right: 20px;
top: 22px;
font-size: 17px;
z-index: 9;
span {
color: #0bb7ff;
cursor: pointer;
}
img {
width: 20px;
}
}
} }
// 左边
.asideL{ .rightIcon {
position: absolute; position: absolute;
box-sizing: border-box; right: 20px;
left: 0px; top: 22px;
.asideL-top{ font-size: 17px;
width: 100%;
height: 141px;
background: #052249;
}
.asideL-Bottom{
height: calc(100% - 141px);
.commom-aside{
height: calc((100%/3) - 6px);
margin-top: 7px;
background: #052249;
}
}
}
// 右边
.asideR{
position: absolute;
right: 0px;
.commom-aside-small{
height: calc(((100% - 146px) /3) - 6px);
background: #052249;
margin-top: 9px;
}
.commom-aside-big{
height: calc(((100% - (100% - 146px) /3)/2) - 6px);
margin-bottom: 9px;
background: #052249;
}
}
.home-center{
position: absolute;
left: 50%;
top: 70px;
transform: translateX(-50%);
width: calc(100% - 890px);
height: 80px;
z-index: 9; z-index: 9;
span {
color: #0bb7ff;
cursor: pointer;
}
img {
width: 20px;
}
}
}
// 左边
.asideL {
position: absolute;
box-sizing: border-box;
left: 0px;
.asideL-top {
width: 100%;
height: 141px;
background: #052249; background: #052249;
} }
.home-foot-t{ .asideL-Bottom {
position: absolute; height: calc(100% - 141px);
left: 50%;
bottom: 2px; .commom-aside {
transform: translateX(-50%); height: calc((100%/3) - 6px);
width: calc(100% - 920px); margin-top: 7px;
height: calc((100% - 141px)/3 - 32px); background: #052249;
min-width: 560px;
overflow: hidden;
z-index: 9;
background: url("~@/assets/images/right-1.png") no-repeat center center;
background-size: 100% 100%;
.comom-title{
background: url("~@/assets/images/bg18.png") no-repeat center center;
background-size: 100% 100%;
.title{
font-size: 22px;
font-family: 'YSBTH';
padding-left: 35px;
}
} }
} }
}
// 公用
.comom-title{ // 右边
background: url("~@/assets/images/bg17.png") no-repeat center center; .asideR {
position: absolute;
right: 0px;
.commom-aside-small {
height: calc(((100% - 146px) /3) - 6px);
background: #052249;
margin-top: 9px;
}
.commom-aside-big {
height: calc(((100% - (100% - 146px) /3)/2) - 6px);
margin-bottom: 9px;
background: #052249;
}
}
.home-center {
position: absolute;
left: 50%;
top: 70px;
transform: translateX(-50%);
width: calc(100% - 890px);
z-index: 9;
background: #052249;
height: calc(100% - (100% - 141px) / 3 - 45px);
.middle-top {
height: 80px;
}
.middle-bottom {
height: calc(100% - 90px);
}
}
.home-foot-t {
position: absolute;
left: 50%;
bottom: 2px;
transform: translateX(-50%);
width: calc(100% - 920px);
height: calc((100% - 141px)/3 - 32px);
min-width: 560px;
overflow: hidden;
z-index: 9;
background: url("~@/assets/images/right-1.png") no-repeat center center;
background-size: 100% 100%;
.comom-title {
background: url("~@/assets/images/bg18.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
width: 100%;
height: 35px; .title {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
box-sizing: border-box;
.title{
font-size: 22px; font-size: 22px;
font-family: 'YSBTH'; font-family: 'YSBTH';
padding-left: 35px; padding-left: 35px;
} }
} }
.comom-cnt{ }
height: calc(100% - 35px);
padding: 4px 10px; // 公用
box-sizing: border-box; .comom-title {
background: url("~@/assets/images/bg_13.png") no-repeat center center; background: url("~@/assets/images/bg17.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
width: 100%;
height: 35px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
box-sizing: border-box;
.title {
font-size: 22px;
font-family: 'YSBTH';
padding-left: 35px;
} }
}
}
.comom-cnt {
height: calc(100% - 35px);
padding: 4px 10px;
box-sizing: border-box;
background: url("~@/assets/images/bg_13.png") no-repeat center center;
background-size: 100% 100%;
}
}

BIN
src/assets/images/ddtb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -340,7 +340,7 @@ export const publicRoutes = [
"@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index" "@/views/backOfficeSystem/HumanIntelligence/CollectCrculate/index"
), ),
meta: { meta: {
title: "人力情报数据采集管理", title: "人力情报管理",
icon: "article" icon: "article"
} }
}, },
@ -485,7 +485,7 @@ export const publicRoutes = [
{ {
path: "/mpvPeo", path: "/mpvPeo",
name: "mpvPeo", name: "mpvPeo",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"), component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeo/index"),
meta: { meta: {
title: "重点人管理", title: "重点人管理",
icon: "article" icon: "article"
@ -494,7 +494,7 @@ export const publicRoutes = [
{ {
path: "/mpvPeoSh", path: "/mpvPeoSh",
name: "mpvPeoSh", name: "mpvPeoSh",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeoSh/index"), component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvPeoSh/index"),
meta: { meta: {
title: "重点人审批", title: "重点人审批",
icon: "article" icon: "article"
@ -503,7 +503,7 @@ export const publicRoutes = [
{ {
path: "/mpvGroup", path: "/mpvGroup",
name: "mpvGroup", name: "mpvGroup",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"), component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroup/index"),
meta: { meta: {
title: "重点群体管理", title: "重点群体管理",
icon: "article" icon: "article"
@ -512,7 +512,7 @@ export const publicRoutes = [
{ {
path: "/mpvGroupSh", path: "/mpvGroupSh",
name: "mpvGroupSh", name: "mpvGroupSh",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroupSh/index"), component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvGroupSh/index"),
meta: { meta: {
title: "重点群体审核", title: "重点群体审核",
icon: "article" icon: "article"
@ -521,7 +521,7 @@ export const publicRoutes = [
{ {
path: "/mpvCar", path: "/mpvCar",
name: "mpvCar", name: "mpvCar",
component: () =>import("@/views/backOfficeSystem/DeploymentDisposal/mpvCar/index"), component: () => import("@/views/backOfficeSystem/DeploymentDisposal/mpvCar/index"),
meta: { meta: {
title: "重点车辆管理", title: "重点车辆管理",
icon: "article" icon: "article"
@ -548,6 +548,18 @@ export const publicRoutes = [
title: "布控监视", title: "布控监视",
icon: "article" icon: "article"
} }
},
{
path: "/experienceShare",
name: "experienceShare",
component: () =>
import(
"@/views/backOfficeSystem/BasicManagement/experienceShare/index"
),
meta: {
title: "经验分享",
icon: "article"
}
} }
] ]
} }

View File

@ -0,0 +1,109 @@
<template>
<div class="dialog" v-if="dialogForm">
<div class="head_box">
<span class="title">经验分享{{ title }} </span>
<div>
<el-button type="primary" size="small" :loading="loading" @click="submit">保存</el-button>
<el-button size="small" @click="close">关闭</el-button>
</div>
</div>
<div class="form_cnt">
<FormMessage :formList="formData" v-model="listQuery" ref="elform" :rules="rules">
</FormMessage>
</div>
</div>
</template>
<script setup>
import FormMessage from "@/components/aboutTable/FormMessage.vue";
import { qcckGet, qcckPost, qcckPut } from "@/api/qcckApi.js";
import Xslist from '@/components/ChooseList/ChooseXs/index.vue'
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance } from "vue";
const emit = defineEmits(["updateDate"]);
const props = defineProps({
dic: Object
});
const { proxy } = getCurrentInstance();
const dialogForm = ref(false); //弹窗
const rules = reactive({
jymc: [
{ required: true, message: "请输入经验名称", trigger: "blur" }
],
fbnr: [
{ required: true, message: "请输入经验内容", trigger: "blur" }
]
});
const formData = ref([
]);
const listQuery = ref({}); //表单
const loading = ref(false);
const elform = ref();
const title = ref("");
// 初始化数据
const init = (type, row) => {
dialogForm.value = true;
title.value = type == "add" ? "新增" : "编辑";
// 根据id查询详情
if (row) {
console.log(row,"xxxxx");
formData.value = [
{ label: "经验名称", prop: "jymc", type: "input", width: "100%" },
{ label: "发布时间", prop: "fbsj", type: "input", width: "50%",disabled:true },
{ label: "发布人", prop: "fbr", type: "input", width: "50%",disabled:true },
{ label: "经验内容", prop: "fbnr", type: "textarea", width: "100%" },
]
listQuery.value = row;
} else {
formData.value = [
{ label: "经验名称", prop: "jymc", type: "input", width: "100%" },
{ label: "任务内容", prop: "fbnr", type: "textarea", width: "100%" },
]
}
};
// 提交
const submit = () => {
elform.value.submit((data) => {
let url = title.value == "新增" ? "/mosty-gsxt/gsxt/jyfx/add" : "/mosty-gsxt/gsxt/jyfx/edit";
let params = { ...data };
qcckPost(params, url).then(() => {
loading.value = false;
proxy.$message({ type: "success", message: title.value + "成功" });
emit("updateDate");
close();
}).catch(()=>{
loading.value = false;
})
});
};
// 关闭
const close = () => {
listQuery.value = {};
loading.value = false;
dialogForm.value = false;
listQuery.value={}
};
defineExpose({ init });
</script>
<style lang="scss" scoped>
@import "~@/assets/css/layout.scss";
@import "~@/assets/css/element-plus.scss";
.boxlist {
width: 99%;
margin-top: 10px;
}
::v-deep .el-textarea__inner {
min-height: 550px !important;
}
</style>

View File

@ -0,0 +1,195 @@
<template>
<div>
<div class="titleBox">
<PageTitle title="经验分享">
<el-button type="primary" @click="addEdit('add', '')">
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
<span style="vertical-align: middle">新增</span>
</el-button>
</PageTitle>
</div>
<!-- 搜索 -->
<div ref="searchBox">
<Search
:searchArr="searchConfiger"
@submit="onSearch"
:key="pageData.keyCount"
></Search>
</div>
<!-- 表格 -->
<div class="tabBox">
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
>
<!-- 操作 -->
<template #controls="{ row }">
<el-link type="primary" @click="addEdit('edit', row)">编辑</el-link>
<el-link type="danger" @click="delDictItem(row.id)">删除</el-link>
</template>
</MyTable>
<Pages
@changeNo="changeNo"
@changeSize="changeSize"
:tableHeight="pageData.tableHeight"
:pageConfiger="{
...pageData.pageConfiger,
total: pageData.total
}"
></Pages>
</div>
<!-- 编辑详情 -->
<EditAddForm
v-if="show"
ref="detailDiloag"
:dic="{ D_GS_BQ_LX, D_GS_BQ_DJ, D_GS_SSYJ, D_GS_BQ_LB }"
@updateDate="getList"
/>
</div>
</template>
<script setup>
import PageTitle from "@/components/aboutTable/PageTitle.vue";
import MyTable from "@/components/aboutTable/MyTable.vue";
import Pages from "@/components/aboutTable/Pages.vue";
import Search from "@/components/aboutTable/Search.vue";
import EditAddForm from "./components/editAddForm.vue";
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js";
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
const detailDiloag = ref();
const show = ref(false);
const searchBox = ref(); //搜索框
const searchConfiger = ref([
{
label: "发布人",
prop: "fbr",
placeholder: "请输入发布人",
showType: "input"
},
{
label: "经验标题",
prop: "jymc",
placeholder: "请输入经验标题",
showType: "input"
},
{
label: "发布时间",
prop: "startTime",
placeholder: "请选择发布时间",
showType: "daterange"
},
]);
const queryFrom = ref({});
const pageData = reactive({
tableData: [], //表格数据
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "null",
loading: false
},
total: 0,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
}, //分页
controlsWidth: 160, //操作栏宽度
tableColumn: [
{
label: "发布人",
prop: "fbr"
},
{
label: "经验名称",
prop: "jymc"
},{
label: "发布时间",
prop: "fbsj"
},{
label: "发布内容",
prop: "fbnr",
showOverflowTooltip:true
},
]
});
onMounted(() => {
tabHeightFn();
getList();
});
// 搜索
const onSearch = (val) => {
queryFrom.value = {
...val,
startTime: val.startTime&&val.startTime.length > 0 ? val.startTime[0] : '',
endTime: val.startTime&& val.startTime.length > 0 ? val.startTime[1] : ''
};
pageData.pageConfiger.pageCurrent = 1;
getList();
};
const changeNo = (val) => {
pageData.pageConfiger.pageCurrent = val;
getList();
};
const changeSize = (val) => {
pageData.pageConfiger.pageSize = val;
getList();
};
const getList = () => {
pageData.tableConfiger.loading = true;
qcckPost(queryFrom.value, "/mosty-gsxt/gsxt/jyfx/selectPage")
.then((res) => {
pageData.tableData = res.records;
pageData.total = res.total;
pageData.tableConfiger.loading = false;
})
.catch(() => {
pageData.tableConfiger.loading = false;
});
};
// 删除
const delDictItem = (id) => {
proxy
.$confirm("确定要删除", "警告", { type: "warning" })
.then(() => {
qcckDelete({}, "/mosty-gsxt/tbGsxtBqzh/" + id).then(() => {
proxy.$message({ type: "success", message: "删除成功" });
getList();
});
})
.catch(() => {});
};
// 新增
const addEdit = (type, row) => {
show.value = true;
nextTick(() => {
detailDiloag.value.init(type, row);
});
};
// 表格高度计算
const tabHeightFn = () => {
pageData.tableHeight =
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () {
tabHeightFn();
};
};
</script>
<style>
.el-loading-mask {
background: rgba(0, 0, 0, 0.5) !important;
}
</style>

View File

@ -0,0 +1,131 @@
<template>
<div class="warning-card ">
<div class="warning-info warning-boder pb5">
<div class="mt4 two_text_detail">{{ item[nameData.title] }}</div>
</div>
<!-- 态势研判预警 -->
<div class="warning-info pt5 pb5 flex align-center just-between" v-if="lx == 1">
<div class="mt4 two_text_detail flex align-center">预警类别
<DictTag :tag="false" :value="item.ypLx" color="#fff" :options="dict.D_SG_TSYPGZ" />
</div>
<div class="mt4 two_text_detail">预警次数{{ item.num }}</div>
</div>
<!-- 群体预警 -->
<div class="warning-info pt5 pb5 flex align-center just-between" v-if="lx == 2">
<div class="mt4 two_text_detail flex align-center">群体类别
<DictTag :tag="false" :value="item.qtlb" color="#fff" :options="dict.D_GS_ZDQT_LB" />
</div>
<div class="mt4 two_text_detail flex align-center">风险等级
<DictTag :tag="false" :value="item.yjJb" color="#fff" :options="dict.D_BZ_TYJB" />
</div>
</div>
<!-- 经验分享 -->
<div class="warning-info pt5 pb5 flex align-center just-between" v-if="lx == 3">
<div class="mt4 two_text_detail">经验发布人{{ item.fbr }}</div>
</div>
<div class="warning-info pt5 pb5 warning-boder" v-if="lx == 1 || lx == 2">
<div class="mt4 two_text_detail">预警时间{{ item.yjsj }}</div>
</div>
<div class="warning-info pt5 pb5 warning-boder" v-if="lx == 3">
<div class="mt4 two_text_detail">经验内容{{ item.fbnr }}</div>
</div>
</div>
</template>
<script setup>
import { IdCard } from '@/utils/validate.js'
import { reactive, ref, watch } from "vue";
const props = defineProps({
item: {
type: Object,
default: {}
}, dict: {
tupe: Object,
default: {}
},
lx: {
type: Number,
default: 1
}
});
let nameData = ref({
title: "ypMc",
lbNoe: "预警类别:",
})
watch(() => props.lx, (val) => {
switch (val) {
case 1:
nameData.value = { title: 'ypMc' }
break;
case 2:
nameData.value = { title: 'qtMc' }
case 3:
nameData.value = { title: 'qtMc' }
break;
}
}, { immediate: true })
</script>
<style lang="scss" scoped>
.warning-card {
background: url("~@/assets/images/xxxxxx.png") no-repeat center center;
background-size: 100% 100%;
gap: 12px;
margin-bottom: 4px;
padding: 10px;
box-sizing: border-box;
.warning-image {
//
// width: 80px;
// height: 100px;
// img {
// width: 100%;
// height: 100%;
// object-fit: cover;
// }
}
.warning-info {
flex: 1;
.tag {
padding: 1px 6px;
background: #0072FF;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
}
.gapline {
width: 2px;
height: 14px;
background: #e9e9e9;
}
}
.warning-boder {
border-bottom: 2px dashed #0958b2;
}
}
.red {
background: url("~@/assets/images/GroupRed.png") no-repeat center center;
background-size: 100% 100%;
}
.orange {
background: url("~@/assets/images/GroupOrange.png") no-repeat center center;
background-size: 100% 100%;
}
.yellow {
background: url("~@/assets/images/GroupYellow.png") no-repeat center center;
background-size: 100% 100%;
}
.blue {
background: url("~@/assets/images/GroupBlue.png") no-repeat center center;
background-size: 100% 100%;
}
</style>

View File

@ -0,0 +1,125 @@
<template>
<div class="warning-card ">
<div class="warning-image flex">
<img :src="item.yjTp" width="65" height="70" />
<div class="ml10 warning-info">
<div class="flex just-between align-center">
<div class="flex align-center mt4" v-if="item.yjLx == 2">
<span >{{ item.yjClcph }}</span>
</div>
<div class="flex align-center mt4" v-else>
<span>{{ item.yjRyxm }}</span>
<span class="gapline mr10 ml10"></span>
<span>{{ IdCard(item.yjRysfzh, 2) }}</span>
<span class="gapline mr10 ml10"></span>
<span>{{ IdCard(item.yjRysfzh, 3) }}</span>
</div>
<span class="tag" v-if="item.yjbqmc">{{ item.yjbqmc }}</span>
</div>
<div v-if="item.yjLx == 2" class="flex">车牌类型
<DictTag :tag="false" :value="item.yjHplx" color="#fff" :options="dict.D_BZ_HPZL"/>
</div>
<div class="mt4" v-else>身份证{{ item.yjRysfzh }}</div>
<div class="mt4 two_text_detail">预警时间{{ item.yjSj }}</div>
</div>
</div>
<div class="warning-info warning-boder pb5">
<div class="mt4 two_text_detail">预警内容{{ item.yjNr }}</div>
</div>
<div class="warning-info pt5 pb5 warning-boder">
<div class="mt4 two_text_detail">处置结果{{ item.yjNr }}</div>
</div>
<div class="warning-info pt5 ">
<div class="two_text_detail flex lh25"><img src="@/assets/images/ddtb.png" width="20" height="25" alt="" srcset="">{{ item.yjNr }}</div>
</div>
</div>
</template>
<script setup>
import { IdCard } from '@/utils/validate.js'
import { reactive, ref } from "vue";
const props = defineProps({
item: {
type: Object,
default: {}
}, dict: {
tupe: Object,
default: {}
}
});
const changeBG = (str) => {
switch (str) {
case "10":
return "red";
case "20":
return "orange";
case "30":
return "yellow";
default: return "blue";
}
};
</script>
<style lang="scss" scoped>
.warning-card {
background: url("~@/assets/images/xxxxxx.png") no-repeat center center;
background-size: 100% 100%;
gap: 12px;
margin-bottom: 4px;
padding: 10px;
box-sizing: border-box;
.warning-image {
//
// width: 80px;
// height: 100px;
// img {
// width: 100%;
// height: 100%;
// object-fit: cover;
// }
}
.warning-info {
flex: 1;
.tag {
padding: 1px 6px;
background: #0072FF;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
}
.gapline {
width: 2px;
height: 14px;
background: #e9e9e9;
}
}
.warning-boder{
border-bottom: 2px dashed #0958b2;
}
}
.red {
background: url("~@/assets/images/GroupRed.png") no-repeat center center;
background-size: 100% 100%;
}
.orange {
background: url("~@/assets/images/GroupOrange.png") no-repeat center center;
background-size: 100% 100%;
}
.yellow {
background: url("~@/assets/images/GroupYellow.png") no-repeat center center;
background-size: 100% 100%;
}
.blue {
background: url("~@/assets/images/GroupBlue.png") no-repeat center center;
background-size: 100% 100%;
}
</style>

View File

@ -5,16 +5,24 @@
</div> </div>
<div class="warning-info"> <div class="warning-info">
<div class="flex just-between align-center"> <div class="flex just-between align-center">
<div class="flex align-center mt4"> <div class="flex align-center mt4" v-if="item.yjLx == 2">
<span>{{ item.yjRyxm }}</span> <span >{{ item.yjClcph }}</span>
<span class="gapline mr10 ml10"></span> </div>
<span>{{ IdCard(item.yjRysfzh,2) }}</span> <div class="flex align-center mt4" v-else>
<span class="gapline mr10 ml10"></span> <span>{{ item.yjRyxm }}</span>
<span>{{ IdCard(item.yjRysfzh,3) }}</span> <span class="gapline mr10 ml10"></span>
</div> <span>{{ IdCard(item.yjRysfzh, 2) }}</span>
<span class="gapline mr10 ml10"></span>
<span>{{ IdCard(item.yjRysfzh, 3) }}</span>
</div>
<span class="tag" v-if="item.yjbqmc">{{ item.yjbqmc }}</span> <span class="tag" v-if="item.yjbqmc">{{ item.yjbqmc }}</span>
</div> </div>
<div class="mt4">身份证{{ item.yjRysfzh }}</div> <div v-if="item.yjLx == 2" class="flex">车牌类型
<DictTag :tag="false" :value="item.yjHplx" color="#fff" :options="dict.D_BZ_HPZL"/>
</div>
<div class="mt4" v-else>身份证{{ item.yjRysfzh }}</div>
<div class="mt4 two_text_detail">预警时间{{ item.yjSj }}</div>
<div class="mt4 one_text_detail">预警地址{{ item.yjDz }}</div> <div class="mt4 one_text_detail">预警地址{{ item.yjDz }}</div>
<div class="mt4 two_text_detail">预警内容{{ item.yjNr }}</div> <div class="mt4 two_text_detail">预警内容{{ item.yjNr }}</div>
</div> </div>
@ -28,19 +36,22 @@ const props = defineProps({
item: { item: {
type: Object, type: Object,
default: {} default: {}
}, dict: {
tupe: Object,
default: {}
} }
}); });
const changeBG = (str) => { const changeBG = (str) => {
switch(str){ switch (str) {
case "10": case "10":
return "red"; return "red";
case "20": case "20":
return "orange"; return "orange";
case "30": case "30":
return "yellow"; return "yellow";
default: return "blue"; default: return "blue";
} }
}; };
</script> </script>
@ -52,31 +63,36 @@ const changeBG = (str) => {
margin-bottom: 4px; margin-bottom: 4px;
padding: 10px; padding: 10px;
box-sizing: border-box; box-sizing: border-box;
.warning-image { .warning-image {
width: 80px; width: 80px;
height: 100px; height: 100px;
img {
width: 100%; img {
height: 100%; width: 100%;
object-fit: cover; height: 100%;
} object-fit: cover;
}
}
.warning-info {
flex: 1;
.tag {
padding: 1px 6px;
background: #0072FF;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
} }
.warning-info { .gapline {
flex: 1; width: 2px;
.tag{ height: 14px;
padding: 1px 6px; background: #e9e9e9;
background: #0072FF;
border-radius: 2px 2px 2px 2px;
font-size: 12px;
}
.gapline{
width: 2px;
height: 14px;
background: #e9e9e9;
}
} }
}
} }
.red { .red {
background: url("~@/assets/images/GroupRed.png") no-repeat center center; background: url("~@/assets/images/GroupRed.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
@ -86,13 +102,14 @@ const changeBG = (str) => {
background: url("~@/assets/images/GroupOrange.png") no-repeat center center; background: url("~@/assets/images/GroupOrange.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
} }
.yellow { .yellow {
background: url("~@/assets/images/GroupYellow.png") no-repeat center center; background: url("~@/assets/images/GroupYellow.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
} }
.blue { .blue {
background: url("~@/assets/images/GroupBlue.png") no-repeat center center; background: url("~@/assets/images/GroupBlue.png") no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
} }
</style> </style>

View File

@ -1,7 +1,8 @@
<template> <template>
<div class="homeBox"> <div class="homeBox">
<GdMap></GdMap> <!-- <GdMap></GdMap> -->
<!-- 头部 --> <!-- 头部 -->
<Head></Head> <Head></Head>
<!-- 内容 --> <!-- 内容 -->
<!-- 左边 --> <!-- 左边 -->
@ -10,19 +11,44 @@
<DbCount></DbCount> <DbCount></DbCount>
</div> </div>
<div class="asideL-Bottom"> <div class="asideL-Bottom">
<div class="commom-aside"><QbsbCount></QbsbCount></div> <div class="commom-aside">
<div class="commom-aside"><QblyType></QblyType></div> <QbsbCount></QbsbCount>
<div class="commom-aside"><QbfkCount></QbfkCount></div> </div>
<div class="commom-aside">
<QblyType></QblyType>
</div>
<div class="commom-aside">
<QbfkCount></QbfkCount>
</div>
</div> </div>
</div> </div>
<!-- 右边 --> <!-- 右边 -->
<div class="home-aside asideR"> <div class="home-aside asideR">
<div class="commom-aside-big"><ZdryWarning></ZdryWarning></div> <div class="commom-aside-big">
<div class="commom-aside-big"><Zdgk></Zdgk></div> <SituationAssessment/>
<div class="commom-aside-small"><Fjqk></Fjqk></div> </div>
<div class="commom-aside-big">
<GroupWarning/>
</div>
<div class="commom-aside-small">
<Experience/>
</div>
</div> </div>
<!-- 中间 --> <!-- 中间 -->
<div class="home-center"><Yszs></Yszs></div> <div class="home-center">
<div class="middle-top">
<Yszs />
</div>
<div class="flex middle-bottom mt10">
<div class="mr10" style="width: 50%;">
<DeployControl />
</div>
<div class="flex-1" style="flex: 1;">
<ZdryWarning />
</div>
</div>
</div>
<!-- 底部 --> <!-- 底部 -->
<div class="home-foot-t"> <div class="home-foot-t">
<Bkcz></Bkcz> <Bkcz></Bkcz>
@ -43,14 +69,18 @@ import QbsbCount from './model/qbsbCount.vue'
import QblyType from './model/qblyType.vue' import QblyType from './model/qblyType.vue'
import Bkcz from './model/bkcz.vue' import Bkcz from './model/bkcz.vue'
import ZdryWarning from './model/zdryWarning.vue' import ZdryWarning from './model/zdryWarning.vue'
import Zdgk from './model/zdgk.vue' import GroupWarning from './model/groupWarning.vue'
import Fjqk from './model/fjqk.vue' import Fjqk from './model/fjqk.vue'
import Yszs from './model/yszs.vue' import Yszs from './model/yszs.vue'
import DeployControl from './model/deployControl.vue';
import SituationAssessment from './model/situationAssessment.vue'
import Experience from './model/experience.vue'
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss"; @import "@/assets/css/homeScreen.scss";
.transition { .transition {
transition: all 0.5s; transition: all 0.5s;
} }
</style> </style>

View File

@ -0,0 +1,149 @@
<template>
<div class="comom-title">
<span class="title">布控预警</span>
</div>
<div class="comom-cnt zdryBox">
<div style="height:33px;">
<CheckBox :data="checkData" @changeData="changeData"></CheckBox>
</div>
<ul class="ryBox" v-loading="loading" v-infinite-scroll="loadList" style="overflow: auto">
<li v-for="item in personList" :key="item.id" @click="chooseItem(item)">
<DeployControlItem :item="item" :dict="{D_BZ_HPZL}"/>
</li>
<MOSTY.Empty :show="!loading && personList.length <= 0" :imgSize="100"></MOSTY.Empty>
</ul>
</div>
</template>
<script setup>
import emitter from "@/utils/eventBus.js";
import { qcckPost } from "@/api/qcckApi.js";
import DeployControlItem from "@/views/home/components/deployControlItem.vue";
import * as MOSTY from "@/components/MyComponents/index";
import CheckBox from "@/components/checkBox/index.vue";
import { ref ,reactive, onMounted,getCurrentInstance} from 'vue';
const { proxy } = getCurrentInstance();
const {D_BZ_HPZL} =proxy.$dict('D_BZ_HPZL')
const checkData = reactive({
list: ["一级", "二级", "三级", "四级"],
hasChoose: ["一级", "二级", "三级", "四级"]
});
const total = ref(0);
const yjJb = ref('10,20,30,40');
const pageNum = ref(1);
const loading = ref(false); // 加载中
const personList = ref([]);
onMounted(()=>{
getList()
})
// 复选框切换
function changeData(val){
pageNum.value = 1;
personList.value = [];
checkData.hasChoose = val;
let ids = [];
val.forEach(it => {
if(it == '一级') ids.push(10);
if(it == '二级') ids.push(20);
if(it == '三级') ids.push(30);
if(it == '四级') ids.push(40);
});
yjJb.value = ids.join(',')
if(val.length == 0) personList.value = [];
else getList();
}
// 触底加载
const loadList = () =>{
if( personList.value.length == total.value) return;
pageNum.value++;
getList()
}
const getList = () =>{
let data = { pageSize:10, pageNum:pageNum.value,yjJb:yjJb.value ,bkyj:1};
loading.value = true;
qcckPost(data,'/mosty-gsxt/tbYjxx/getPageList').then(res=>{
loading.value = false;
let arr = res.records || [];
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);
total.value = res.total;
}).catch(()=>{
loading.value = false;
})
}
const chooseItem = (item) =>{
emitter.emit('showHomeYJ',[item]);
emitter.emit('deletePointArea','home_yj_map');
if(!item.jd || !item.jd) return proxy.$message({ type: "warning", message: "该预警没有坐标!" });
let icon = require('@/assets/point/yj.png');
if(item.yjjb == '20') icon = require('@/assets/point/yj1.png');
if(item.yjjb == '30') icon = require('@/assets/point/yj2.png');
if(item.yjjb == '40') icon = require('@/assets/point/yj3.png');
emitter.emit('addPointArea',{flag:'home_yj_map',icon,coords:[item]});
emitter.emit('setMapCenter',{location:[item.jd,item.wd],zoomLevel:10});
}
</script>
<style>
.el-loading-mask{
background: rgba(0,0,0,0.5);
}
</style>
<style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss";
.zdryBox{
background: #052249;
height: 100%;
.ryBox{
height: calc(100% - 33px);
overflow: hidden;
overflow-y: auto;
}
}
::-webkit-scrollbar {
background-color: #263b70;
}
::-webkit-scrollbar-thumb {
background-color: #146bbe;
}
::-webkit-scrollbar-track {
background-color: #263b70;
}
::-webkit-scrollbar-corner {
background-color: #142141;
}
::v-deep .el-checkbox__label{
color:#fff;
}
::v-deep .el-checkbox__input.is-checked+.el-checkbox__label{
color:#00FFFF;
}
::v-deep .el-checkbox__inner{
background:rgba(0,144,255,0.2);
border:1px solid #0072FF;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__inner::after{
border:2px solid #000;
border-left:0;
border-top:0;
left:3px;
top:0px;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner::before{
background: #000;
}
</style>

View File

@ -0,0 +1,144 @@
<template>
<div class="comom-title">
<span class="title">经验分享</span>
</div>
<div class="comom-cnt zdryBox">
<ul class="ryBox" v-loading="loading" v-infinite-scroll="loadList" style="overflow: auto">
<li v-for="item in personList" :key="item.id" >
<Assessment :item="item" :dict="{D_GS_ZDQT_LB,D_BZ_TYJB}" :lx="3"/>
</li>
<MOSTY.Empty :show="!loading && personList.length <= 0" :imgSize="100"></MOSTY.Empty>
</ul>
</div>
</template>
<script setup>
import emitter from "@/utils/eventBus.js";
import { qcckPost } from "@/api/qcckApi.js";
import Assessment from "@/views/home/components/assessmentItem.vue";
import * as MOSTY from "@/components/MyComponents/index";
import CheckBox from "@/components/checkBox/index.vue";
import { ref ,reactive, onMounted,getCurrentInstance} from 'vue';
const { proxy } = getCurrentInstance();
const {D_GS_ZDQT_LB,D_BZ_TYJB} =proxy.$dict('D_GS_ZDQT_LB','D_BZ_TYJB')
const checkData = reactive({
list: ["人员", "车辆"],
hasChoose: ["人员", "车辆"],
});
const total = ref(0);
const yjJb = ref('10,20,30,40');
const pageNum = ref(1);
const loading = ref(false); // 加载中
const personList = ref([]);
onMounted(()=>{
getList()
})
// 复选框切换
function changeData(val){
pageNum.value = 1;
personList.value = [];
checkData.hasChoose = val;
let ids = [];
val.forEach(it => {
if(it == '人员') ids.push(1);
if(it == '车辆') ids.push(2);
});
yjJb.value = ids.join(',')
if(val.length == 0) personList.value = [];
else getList();
}
// 触底加载
const loadList = () =>{
if( personList.value.length == total.value) return;
pageNum.value++;
getList()
}
const getList = () =>{
let data = { pageSize:10, pageCurrent:pageNum.value };
loading.value = true;
qcckPost(data,'/mosty-gsxt/gsxt/jyfx/selectPage').then(res=>{
loading.value = false;
let arr = res.records || [];
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);
total.value = res.total;
}).catch(()=>{
loading.value = false;
})
}
const chooseItem = (item) =>{
emitter.emit('showHomeYJ',[item]);
emitter.emit('deletePointArea','home_yj_map');
if(!item.jd || !item.jd) return proxy.$message({ type: "warning", message: "该预警没有坐标!" });
let icon = require('@/assets/point/yj.png');
if(item.yjjb == '20') icon = require('@/assets/point/yj1.png');
if(item.yjjb == '30') icon = require('@/assets/point/yj2.png');
if(item.yjjb == '40') icon = require('@/assets/point/yj3.png');
emitter.emit('addPointArea',{flag:'home_yj_map',icon,coords:[item]});
emitter.emit('setMapCenter',{location:[item.jd,item.wd],zoomLevel:10});
}
</script>
<style>
.el-loading-mask{
background: rgba(0,0,0,0.5);
}
</style>
<style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss";
.zdryBox{
background: #052249;
height: 100%;
.ryBox{
height: 100%;
overflow: hidden;
overflow-y: auto;
}
}
::-webkit-scrollbar {
background-color: #263b70;
}
::-webkit-scrollbar-thumb {
background-color: #146bbe;
}
::-webkit-scrollbar-track {
background-color: #263b70;
}
::-webkit-scrollbar-corner {
background-color: #142141;
}
::v-deep .el-checkbox__label{
color:#fff;
}
::v-deep .el-checkbox__input.is-checked+.el-checkbox__label{
color:#00FFFF;
}
::v-deep .el-checkbox__inner{
background:rgba(0,144,255,0.2);
border:1px solid #0072FF;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__inner::after{
border:2px solid #000;
border-left:0;
border-top:0;
left:3px;
top:0px;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner::before{
background: #000;
}
</style>

View File

@ -0,0 +1,144 @@
<template>
<div class="comom-title">
<span class="title">群体预警</span>
</div>
<div class="comom-cnt zdryBox">
<ul class="ryBox" v-loading="loading" v-infinite-scroll="loadList" style="overflow: auto">
<li v-for="item in personList" :key="item.id" >
<Assessment :item="item" :dict="{D_GS_ZDQT_LB,D_BZ_TYJB}" :lx="2"/>
</li>
<MOSTY.Empty :show="!loading && personList.length <= 0" :imgSize="100"></MOSTY.Empty>
</ul>
</div>
</template>
<script setup>
import emitter from "@/utils/eventBus.js";
import { qcckPost } from "@/api/qcckApi.js";
import Assessment from "@/views/home/components/assessmentItem.vue";
import * as MOSTY from "@/components/MyComponents/index";
import CheckBox from "@/components/checkBox/index.vue";
import { ref ,reactive, onMounted,getCurrentInstance} from 'vue';
const { proxy } = getCurrentInstance();
const {D_GS_ZDQT_LB,D_BZ_TYJB} =proxy.$dict('D_GS_ZDQT_LB','D_BZ_TYJB')
const checkData = reactive({
list: ["人员", "车辆"],
hasChoose: ["人员", "车辆"],
});
const total = ref(0);
const yjJb = ref('10,20,30,40');
const pageNum = ref(1);
const loading = ref(false); // 加载中
const personList = ref([]);
onMounted(()=>{
getList()
})
// 复选框切换
function changeData(val){
pageNum.value = 1;
personList.value = [];
checkData.hasChoose = val;
let ids = [];
val.forEach(it => {
if(it == '人员') ids.push(1);
if(it == '车辆') ids.push(2);
});
yjJb.value = ids.join(',')
if(val.length == 0) personList.value = [];
else getList();
}
// 触底加载
const loadList = () =>{
if( personList.value.length == total.value) return;
pageNum.value++;
getList()
}
const getList = () =>{
let data = { pageSize:10, pageCurrent:pageNum.value };
loading.value = true;
qcckPost(data,'/mosty-gsxt/qtYjxx/getPageList').then(res=>{
loading.value = false;
let arr = res.records || [];
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);
total.value = res.total;
}).catch(()=>{
loading.value = false;
})
}
const chooseItem = (item) =>{
emitter.emit('showHomeYJ',[item]);
emitter.emit('deletePointArea','home_yj_map');
if(!item.jd || !item.jd) return proxy.$message({ type: "warning", message: "该预警没有坐标!" });
let icon = require('@/assets/point/yj.png');
if(item.yjjb == '20') icon = require('@/assets/point/yj1.png');
if(item.yjjb == '30') icon = require('@/assets/point/yj2.png');
if(item.yjjb == '40') icon = require('@/assets/point/yj3.png');
emitter.emit('addPointArea',{flag:'home_yj_map',icon,coords:[item]});
emitter.emit('setMapCenter',{location:[item.jd,item.wd],zoomLevel:10});
}
</script>
<style>
.el-loading-mask{
background: rgba(0,0,0,0.5);
}
</style>
<style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss";
.zdryBox{
background: #052249;
height: 100%;
.ryBox{
height: 100%;
overflow: hidden;
overflow-y: auto;
}
}
::-webkit-scrollbar {
background-color: #263b70;
}
::-webkit-scrollbar-thumb {
background-color: #146bbe;
}
::-webkit-scrollbar-track {
background-color: #263b70;
}
::-webkit-scrollbar-corner {
background-color: #142141;
}
::v-deep .el-checkbox__label{
color:#fff;
}
::v-deep .el-checkbox__input.is-checked+.el-checkbox__label{
color:#00FFFF;
}
::v-deep .el-checkbox__inner{
background:rgba(0,144,255,0.2);
border:1px solid #0072FF;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__inner::after{
border:2px solid #000;
border-left:0;
border-top:0;
left:3px;
top:0px;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner::before{
background: #000;
}
</style>

View File

@ -0,0 +1,144 @@
<template>
<div class="comom-title">
<span class="title">态势研判预警</span>
</div>
<div class="comom-cnt zdryBox">
<ul class="ryBox" v-loading="loading" v-infinite-scroll="loadList" style="overflow: auto">
<li v-for="item in personList" :key="item.id" >
<Assessment :item="item" :dict="{D_SG_TSYPGZ}" :lx="2"/>
</li>
<MOSTY.Empty :show="!loading && personList.length <= 0" :imgSize="100"></MOSTY.Empty>
</ul>
</div>
</template>
<script setup>
import emitter from "@/utils/eventBus.js";
import { qcckPost } from "@/api/qcckApi.js";
import Assessment from "@/views/home/components/assessmentItem.vue";
import * as MOSTY from "@/components/MyComponents/index";
import CheckBox from "@/components/checkBox/index.vue";
import { ref ,reactive, onMounted,getCurrentInstance} from 'vue';
const { proxy } = getCurrentInstance();
const {D_SG_TSYPGZ} =proxy.$dict('D_SG_TSYPGZ')
const checkData = reactive({
list: ["人员", "车辆"],
hasChoose: ["人员", "车辆"],
});
const total = ref(0);
const yjJb = ref('10,20,30,40');
const pageNum = ref(1);
const loading = ref(false); // 加载中
const personList = ref([]);
onMounted(()=>{
getList()
})
// 复选框切换
function changeData(val){
pageNum.value = 1;
personList.value = [];
checkData.hasChoose = val;
let ids = [];
val.forEach(it => {
if(it == '人员') ids.push(1);
if(it == '车辆') ids.push(2);
});
yjJb.value = ids.join(',')
if(val.length == 0) personList.value = [];
else getList();
}
// 触底加载
const loadList = () =>{
if( personList.value.length == total.value) return;
pageNum.value++;
getList()
}
const getList = () =>{
let data = { pageSize:10, pageCurrent:pageNum.value };
loading.value = true;
qcckPost(data,'/mosty-gsxt/tsyp/selectPage').then(res=>{
loading.value = false;
let arr = res.records || [];
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);
total.value = res.total;
}).catch(()=>{
loading.value = false;
})
}
const chooseItem = (item) =>{
emitter.emit('showHomeYJ',[item]);
emitter.emit('deletePointArea','home_yj_map');
if(!item.jd || !item.jd) return proxy.$message({ type: "warning", message: "该预警没有坐标!" });
let icon = require('@/assets/point/yj.png');
if(item.yjjb == '20') icon = require('@/assets/point/yj1.png');
if(item.yjjb == '30') icon = require('@/assets/point/yj2.png');
if(item.yjjb == '40') icon = require('@/assets/point/yj3.png');
emitter.emit('addPointArea',{flag:'home_yj_map',icon,coords:[item]});
emitter.emit('setMapCenter',{location:[item.jd,item.wd],zoomLevel:10});
}
</script>
<style>
.el-loading-mask{
background: rgba(0,0,0,0.5);
}
</style>
<style lang="scss" scoped>
@import "@/assets/css/homeScreen.scss";
.zdryBox{
background: #052249;
height: 100%;
.ryBox{
height: 100%;
overflow: hidden;
overflow-y: auto;
}
}
::-webkit-scrollbar {
background-color: #263b70;
}
::-webkit-scrollbar-thumb {
background-color: #146bbe;
}
::-webkit-scrollbar-track {
background-color: #263b70;
}
::-webkit-scrollbar-corner {
background-color: #142141;
}
::v-deep .el-checkbox__label{
color:#fff;
}
::v-deep .el-checkbox__input.is-checked+.el-checkbox__label{
color:#00FFFF;
}
::v-deep .el-checkbox__inner{
background:rgba(0,144,255,0.2);
border:1px solid #0072FF;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner{
background-color: #00FFFF;
border-color:#00FFFF;
}
::v-deep .el-checkbox__inner::after{
border:2px solid #000;
border-left:0;
border-top:0;
left:3px;
top:0px;
}
::v-deep .el-checkbox__input.is-indeterminate .el-checkbox__inner::before{
background: #000;
}
</style>

View File

@ -41,4 +41,4 @@ const getCount = () =>{
height: 50px; height: 50px;
background: url('~@/assets/images/line.png') no-repeat bottom center; background: url('~@/assets/images/line.png') no-repeat bottom center;
} }
</style> </style>

View File

@ -1,14 +1,14 @@
<template> <template>
<div class="comom-title"> <div class="comom-title">
<span class="title">重点人员动态预警</span> <span class="title">常规预警</span>
</div> </div>
<div class="comom-cnt zdryBox"> <div class="comom-cnt zdryBox">
<div style="height:33px;"> <div style="height:33px;">
<CheckBox :data="checkData" @changeData="changeData"></CheckBox> <CheckBox :data="checkData" @changeData="changeData"></CheckBox>
</div> </div>
<ul class="ryBox" v-loading="loading" v-infinite-scroll="loadList" style="overflow: auto"> <ul class="ryBox" v-loading="loading" v-infinite-scroll="loadList" style="overflow: auto">
<li v-for="item in personList" :key="item.id" @click="chooseItem(item)"> <li v-for="item in personList" :key="item.id" @click="chooseItem(item)">
<YjItem :item="item"></YjItem> <YjItem :item="item" :dict="{D_BZ_HPZL}"></YjItem>
</li> </li>
<MOSTY.Empty :show="!loading && personList.length <= 0" :imgSize="100"></MOSTY.Empty> <MOSTY.Empty :show="!loading && personList.length <= 0" :imgSize="100"></MOSTY.Empty>
</ul> </ul>
@ -23,12 +23,13 @@ import * as MOSTY from "@/components/MyComponents/index";
import CheckBox from "@/components/checkBox/index.vue"; import CheckBox from "@/components/checkBox/index.vue";
import { ref ,reactive, onMounted,getCurrentInstance} from 'vue'; import { ref ,reactive, onMounted,getCurrentInstance} from 'vue';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const {D_BZ_HPZL} =proxy.$dict('D_BZ_HPZL')
const checkData = reactive({ const checkData = reactive({
list: ["红", "橙", "黄", ""], list: ["人员", "车辆"],
hasChoose: ["","", "黄", "蓝"] hasChoose: ["人员", "车辆"],
}); });
const total = ref(0); const total = ref(0);
const yjJb = ref('10,20,30,40'); const yjJb = ref('1,2');
const pageNum = ref(1); const pageNum = ref(1);
const loading = ref(false); // 加载中 const loading = ref(false); // 加载中
const personList = ref([]); const personList = ref([]);
@ -42,10 +43,8 @@ function changeData(val){
checkData.hasChoose = val; checkData.hasChoose = val;
let ids = []; let ids = [];
val.forEach(it => { val.forEach(it => {
if(it == '') ids.push(10); if(it == '人员') ids.push(1);
if(it == '') ids.push(20); if(it == '车辆') ids.push(2);
if(it == '黄') ids.push(30);
if(it == '蓝') ids.push(40);
}); });
yjJb.value = ids.join(',') yjJb.value = ids.join(',')
if(val.length == 0) personList.value = []; if(val.length == 0) personList.value = [];
@ -60,9 +59,9 @@ const loadList = () =>{
} }
const getList = () =>{ const getList = () =>{
let data = { pageSize:10, pageNum:pageNum.value,yjJb:yjJb.value }; let data = { pageSize:10, pageNum:pageNum.value,yjLx:yjJb.value };
loading.value = true; loading.value = true;
qcckPost(data,'/mosty-jmxf/tbYjxx/getPageList').then(res=>{ qcckPost(data,'/mosty-gsxt/tbYjxx/getPageList').then(res=>{
loading.value = false; loading.value = false;
let arr = res.records || []; let arr = res.records || [];
personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr); personList.value = pageNum.value == 1 ? arr : personList.value.concat(arr);

View File

@ -4,7 +4,7 @@ function resolve(dir) {
return path.join(__dirname, dir); return path.join(__dirname, dir);
} }
const serverHost = "http://192.168.8.15:8066"//波哥 const serverHost = "http://192.168.1.32:8066"//波哥
// const serverHost = "http://192.168.0.231:8006"//线上 // const serverHost = "http://192.168.0.231:8006"//线上
// const serverHost = "http://192.168.1.117:8006"//周 // const serverHost = "http://192.168.1.117:8006"//周
// const serverHost = "http://192.168.1.98:8006"//毛毛 // const serverHost = "http://192.168.1.98:8006"//毛毛