diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/PublicStateEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/PublicStateEnum.java
index 7efde897..3be1c65d 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/PublicStateEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/PublicStateEnum.java
@@ -15,6 +15,12 @@ public enum PublicStateEnum {
PROJECT_CHECK_TYPE_JPYS("1", "举牌验收"),
PROJECT_CHECK_POSITION_TYPE("1", "默认工序部位类型"),
/**********************************项目验收***************************************/
+
+ /**********************************视频设备***************************************/
+ VIDEO_ONLINE("1", "在线"),
+ VIDEO_OFFLINE("2", "离线"),
+ VIDEO_UNKNOWN("3", "未知"),
+ /**********************************视频设备***************************************/
COMZGS("1","子公司状态标识");
private final String code;
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index 68781ec2..96efed5a 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -62,6 +62,7 @@
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
+ "vue-h265-player": "^0.0.24",
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
diff --git a/ruoyi-ui/public/libDecoder.wasm b/ruoyi-ui/public/libDecoder.wasm
new file mode 100644
index 00000000..a45028da
Binary files /dev/null and b/ruoyi-ui/public/libDecoder.wasm differ
diff --git a/ruoyi-ui/src/api/project/videoConfig.js b/ruoyi-ui/src/api/project/videoConfig.js
deleted file mode 100644
index b31085a7..00000000
--- a/ruoyi-ui/src/api/project/videoConfig.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import request from '@/utils/request'
-
-// 查询视频配置列表
-export function listVideoConfig(query) {
- return request({
- url: '/project/videoConfig/list',
- method: 'get',
- params: query
- })
-}
-
-// 查询视频配置详细
-export function getVideoConfig(id) {
- return request({
- url: '/project/videoConfig/' + id,
- method: 'get'
- })
-}
-
-// 新增视频配置
-export function addVideoConfig(data) {
- return request({
- url: '/project/videoConfig',
- method: 'post',
- data: data
- })
-}
-
-// 修改视频配置
-export function updateVideoConfig(data) {
- return request({
- url: '/project/videoConfig',
- method: 'put',
- data: data
- })
-}
-
-// 删除视频配置
-export function delVideoConfig(id) {
- return request({
- url: '/project/videoConfig/' + id,
- method: 'delete'
- })
-}
diff --git a/ruoyi-ui/src/api/video/videoConfig.js b/ruoyi-ui/src/api/video/videoConfig.js
new file mode 100644
index 00000000..8f534844
--- /dev/null
+++ b/ruoyi-ui/src/api/video/videoConfig.js
@@ -0,0 +1,69 @@
+import request from '@/utils/request'
+
+// 查询视频配置列表
+export function listVideoConfig(query) {
+ return request({
+ url: '/video/videoConfig/list',
+ method: 'get',
+ params: query
+ })
+}
+// 查询视频配置列表
+export function listVideoView(query) {
+ return request({
+ url: '/video/videoConfig/listView',
+ method: 'get',
+ params: query
+ })
+}
+
+// 查询视频配置详细
+export function getVideoConfig(id) {
+ return request({
+ url: '/video/videoConfig/' + id,
+ method: 'get'
+ })
+}
+
+// 新增视频配置
+export function addVideoConfig(data) {
+ return request({
+ url: '/video/videoConfig',
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改视频配置
+export function updateVideoConfig(data) {
+ return request({
+ url: '/video/videoConfig',
+ method: 'put',
+ data: data
+ })
+}
+
+// 修改视频配置
+export function updateVideoConfigSort(data) {
+ return request({
+ url: '/video/videoConfig/updateVideoConfigSort',
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除视频配置
+export function delVideoConfig(id) {
+ return request({
+ url: '/video/videoConfig/' + id,
+ method: 'delete'
+ })
+}
+
+// 根据设备编号查询设备通道信息
+export function getVideoPassage(videoDvrNumberd) {
+ return request({
+ url: '/video/videoConfig/getVideoPassage/' + videoDvrNumberd,
+ method: 'get'
+ })
+}
diff --git a/ruoyi-ui/src/styles/menu.scss b/ruoyi-ui/src/styles/menu.scss
new file mode 100644
index 00000000..e5938c97
--- /dev/null
+++ b/ruoyi-ui/src/styles/menu.scss
@@ -0,0 +1 @@
+.demo-block{border:1px solid #ebebeb;border-radius:3px;transition:.2s}.demo-block.hover{box-shadow:0 0 8px 0 rgba(232,237,250,.6),0 2px 4px 0 rgba(232,237,250,.5)}.demo-block code{font-family:Menlo,Monaco,Consolas,Courier,monospace}.demo-block .demo-button{float:right}.demo-block .source{padding:24px}.demo-block .meta{background-color:#fafafa;border-top:1px solid #eaeefb;overflow:hidden;height:0;transition:height .2s}.demo-block .description{padding:20px;box-sizing:border-box;border:1px solid #ebebeb;border-radius:3px;font-size:14px;line-height:22px;color:#666;word-break:break-word;margin:10px;background-color:#fff}.demo-block .description p{margin:0;line-height:26px}.demo-block .description code{color:#5e6d82;background-color:#e6effb;margin:0 4px;display:inline-block;padding:1px 5px;font-size:12px;border-radius:3px;height:18px;line-height:18px}.demo-block .highlight pre{margin:0}.demo-block .highlight code.hljs{margin:0;border:none;max-height:none;border-radius:0}.demo-block .highlight code.hljs:before{content:none}.demo-block .demo-block-control{border-top:1px solid #eaeefb;height:44px;box-sizing:border-box;background-color:#fff;border-bottom-left-radius:4px;border-bottom-right-radius:4px;text-align:center;margin-top:-1px;color:#d3dce6;cursor:pointer;position:relative}.demo-block .demo-block-control.is-fixed{position:fixed;bottom:0;width:868px}.demo-block .demo-block-control i{font-size:16px;line-height:44px;transition:.3s}.demo-block .demo-block-control i.hovering{transform:translateX(-40px)}.demo-block .demo-block-control>span{position:absolute;transform:translateX(-30px);font-size:14px;line-height:44px;transition:.3s;display:inline-block}.demo-block .demo-block-control:hover{color:#409eff;background-color:#f9fafc}.demo-block .demo-block-control .text-slide-enter,.demo-block .demo-block-control .text-slide-leave-active{opacity:0;transform:translateX(10px)}.demo-block .demo-block-control .control-button{line-height:26px;position:absolute;top:0;right:0;font-size:14px;padding-left:5px;padding-right:25px}.footer{background-color:#f7fbfd;width:100%;padding:40px 150px;margin-top:-340px;box-sizing:border-box;height:340px}.footer .container{box-sizing:border-box;width:auto}.footer .footer-main{font-size:0;display:inline-block;vertical-align:top;margin-right:110px}.footer .footer-main h4{font-size:18px;color:#333;line-height:1;margin:0 0 15px}.footer .footer-main .footer-main-link{display:block;margin:0;line-height:2;font-size:14px;color:#666}.footer .footer-main .footer-main-link:hover{color:#333}.footer .footer-social{float:right;text-align:right}.footer .footer-social .footer-social-title{color:#666;font-size:18px;line-height:1;margin:0 0 20px;padding:0;font-weight:700}.footer .footer-social .elementdoc{transition:.3s;display:inline-block;line-height:32px;text-align:center;color:#c8d6e8;background-color:transparent;size:32px;font-size:32px;vertical-align:middle;margin-right:20px}.footer .footer-social .elementdoc:hover{transform:scale(1.2);color:#8d99ab}.footer .footer-social .doc-icon-gitter{margin-right:0}.el-popover.footer-popover{padding:0;min-width:120px;line-height:normal;box-shadow:0 0 11px 0 rgba(174,187,211,.24)}.el-popover.footer-popover .footer-popover-title{border-bottom:1px solid #eaeefb;height:30px;line-height:30px;text-align:center;color:#99a9bf;background-color:#f8f9fe}.el-popover.footer-popover img{size:100px;margin:10px}@media (max-width:1140px){.footer{height:auto}}@media (max-width:1000px){.footer-social{display:none}}@media (max-width:768px){.footer .footer-main{margin-bottom:30px}}.theme-picker{height:80px;display:inline-block}.theme-picker .el-color-picker__trigger{vertical-align:middle}.theme-picker-dropdown .el-color-dropdown__link-btn{display:none}.algolia-search{width:450px!important}.algolia-search.is-empty .el-autocomplete-suggestion__list{padding-bottom:0}.algolia-search .el-autocomplete-suggestion__list{position:static!important;padding-bottom:28px}.algolia-search li{border-bottom:1px solid #ebebeb}.algolia-search li:last-child{border-bottom:none}.algolia-search .algolia-highlight{color:#409eff;font-weight:700}.algolia-search .algolia-search-title{font-size:14px;margin:6px 0;line-height:1.8}.algolia-search .algolia-search-separator{padding:0 6px}.algolia-search .algolia-search-content{font-size:12px;margin:6px 0;line-height:2.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.algolia-search .algolia-search-link{position:absolute;bottom:0;left:0;width:100%;padding-right:20px;background-color:#e4e7ed;border-bottom-left-radius:4px;border-bottom-right-radius:4px;box-sizing:border-box;text-align:right}.algolia-search .algolia-search-link:hover{background-color:#e4e7ed}.algolia-search .algolia-search-link img{display:inline-block;height:17px;margin-top:10px}.algolia-search .algolia-search-empty{margin:5px 0;text-align:center;color:#999}.progress[data-v-3285c94c]{position:fixed;top:0;left:0;right:0;height:2px;width:0;transition:width .2s,opacity .4s;opacity:1;z-index:999999}.loadingClass{z-index:0!important}.loadingClass .el-loading-spinner{top:0;margin-top:30%}.headerWrapper[data-v-7d3f822e]{height:80px}#v3-banner[data-v-7d3f822e]{background-color:#409eff;min-height:30px;padding:5px 60px;z-index:19;box-sizing:border-box;text-align:center;color:#eee}#v3-banner a[data-v-7d3f822e]{color:#fff;font-weight:700}.header[data-v-7d3f822e]{height:80px;background-color:#fff;color:#fff;top:0;left:0;width:100%;line-height:80px;z-index:100;position:relative}.header .container[data-v-7d3f822e]{height:100%;box-sizing:border-box;border-bottom:1px solid #dcdfe6}.header .nav-lang-spe[data-v-7d3f822e]{color:#888}.header h1[data-v-7d3f822e]{margin:0;float:left;font-size:32px;font-weight:400}.header h1 a[data-v-7d3f822e]{color:#333;text-decoration:none;display:block}.header h1 span[data-v-7d3f822e]{font-size:12px;display:inline-block;width:34px;height:18px;border:1px solid hsla(0,0%,100%,.5);text-align:center;line-height:18px;vertical-align:middle;margin-left:10px;border-radius:3px}.header .nav[data-v-7d3f822e]{float:right;height:100%;line-height:80px;background:transparent;padding:0;margin:0}.header .nav[data-v-7d3f822e]:after,.header .nav[data-v-7d3f822e]:before{display:table;content:""}.header .nav[data-v-7d3f822e]:after{clear:both}.header .nav-gap[data-v-7d3f822e]{position:relative;width:1px;height:80px;padding:0 20px}.header .nav-gap[data-v-7d3f822e]:before{content:"";position:absolute;top:calc(50% - 8px);width:1px;height:16px;background:#ebebeb}.header .nav-logo-small[data-v-7d3f822e],.header .nav-logo[data-v-7d3f822e]{vertical-align:sub}.header .nav-logo-small[data-v-7d3f822e]{display:none}.header .nav-item[data-v-7d3f822e]{margin:0;float:left;list-style:none;position:relative;cursor:pointer}.header .nav-item.nav-algolia-search[data-v-7d3f822e]{cursor:default}.header .nav-item.lang-item[data-v-7d3f822e],.header .nav-item[data-v-7d3f822e]:last-child{cursor:default;margin-left:34px}.header .nav-item.lang-item span[data-v-7d3f822e],.header .nav-item:last-child span[data-v-7d3f822e]{opacity:.8}.header .nav-item.lang-item .nav-lang[data-v-7d3f822e],.header .nav-item:last-child .nav-lang[data-v-7d3f822e]{cursor:pointer;display:inline-block;height:100%;color:#888}.header .nav-item.lang-item .nav-lang[data-v-7d3f822e]:hover,.header .nav-item:last-child .nav-lang[data-v-7d3f822e]:hover{color:#409eff}.header .nav-item.lang-item .nav-lang.active[data-v-7d3f822e],.header .nav-item:last-child .nav-lang.active[data-v-7d3f822e]{font-weight:700;color:#409eff}.header .nav-item a[data-v-7d3f822e]{text-decoration:none;color:#1989fa;opacity:.5;display:block;padding:0 22px}.header .nav-item a.active[data-v-7d3f822e],.header .nav-item a[data-v-7d3f822e]:hover{opacity:1}.header .nav-item a.active[data-v-7d3f822e]:after{content:"";display:inline-block;position:absolute;bottom:0;left:calc(50% - 15px);width:30px;height:2px;background:#409eff}.nav-dropdown[data-v-7d3f822e]{margin-bottom:6px;padding-left:18px;width:100%}.nav-dropdown span[data-v-7d3f822e]{display:block;width:100%;font-size:16px;color:#888;line-height:40px;transition:.2s;padding-bottom:6px;user-select:none}.nav-dropdown span[data-v-7d3f822e]:hover{cursor:pointer}.nav-dropdown i[data-v-7d3f822e]{transition:.2s;font-size:12px;color:#979797;transform:translateY(-2px)}.nav-dropdown .is-active i[data-v-7d3f822e],.nav-dropdown .is-active span[data-v-7d3f822e]{color:#409eff}.nav-dropdown .is-active i[data-v-7d3f822e]{transform:rotate(180deg) translateY(3px)}.nav-dropdown:hover i[data-v-7d3f822e],.nav-dropdown:hover span[data-v-7d3f822e]{color:#409eff}.nav-dropdown-list[data-v-7d3f822e]{width:auto}@media (max-width:850px){.header .nav-logo[data-v-7d3f822e]{display:none}.header .nav-logo-small[data-v-7d3f822e]{display:inline-block}.header .nav-item[data-v-7d3f822e]{margin-left:6px}.header .nav-item.lang-item[data-v-7d3f822e],.header .nav-item[data-v-7d3f822e]:last-child{margin-left:10px}.header .nav-item a[data-v-7d3f822e]{padding:0 5px}.header .nav-algolia-search[data-v-7d3f822e],.header .nav-theme-switch[data-v-7d3f822e]{display:none}}@media (max-width:700px){.header .container[data-v-7d3f822e]{padding:0 12px}.header .nav-item a[data-v-7d3f822e]{font-size:12px;vertical-align:top}.header .nav-item.lang-item[data-v-7d3f822e]{height:100%}.header .nav-item.lang-item .nav-lang[data-v-7d3f822e]{display:flex;align-items:center}.header .nav-item.lang-item .nav-lang span[data-v-7d3f822e]{padding-bottom:0}.header .nav-dropdown[data-v-7d3f822e]{padding:0}.header .nav-dropdown span[data-v-7d3f822e]{font-size:12px}.header .nav-gap[data-v-7d3f822e]{padding:0 8px}.header .nav-versions[data-v-7d3f822e]{display:none}}.side-nav{width:100%;box-sizing:border-box;padding-right:30px;transition:opacity .3s}.side-nav.is-fade{transition:opacity 3s}.side-nav li{list-style:none}.side-nav ul{padding:0;margin:0;overflow:hidden}.side-nav>ul>.nav-item>a{margin-top:15px}.side-nav>ul>.nav-item:nth-child(-n+4)>a{margin-top:0}.side-nav .nav-item a{font-size:16px;color:#333;line-height:40px;height:40px;margin:0;padding:0;text-decoration:none;display:block;position:relative;transition:.15s ease-out;font-weight:700}.side-nav .nav-item a.active{color:#409eff}.side-nav .nav-item .nav-item a{display:block;height:40px;color:#444;line-height:40px;font-size:14px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400}.side-nav .nav-item .nav-item a.active,.side-nav .nav-item .nav-item a:hover{color:#409eff}.side-nav .nav-item.sponsors>.sub-nav{margin-top:-10px}.side-nav .nav-item.sponsors>a{color:#777;font-weight:300;font-size:14px}.side-nav .nav-item.sponsors .nav-item{display:inline-block}.side-nav .nav-item.sponsors .nav-item a{height:auto;display:inline-block;vertical-align:middle;margin:8px 12px 12px 0}.side-nav .nav-item.sponsors .nav-item a img{width:42px}.side-nav .nav-item.sponsors .nav-item:first-child a img{width:36px}.side-nav .nav-group__title{font-size:12px;color:#999;line-height:26px;margin-top:15px}.side-nav #code-sponsor-widget{margin:0 0 0 -20px}.nav-dropdown-list{width:120px;margin-top:-8px}.footer-nav,.nav-dropdown-list li{font-size:14px}.footer-nav{padding:40px 0;color:#333}.footer-nav:after{content:"";display:block;clear:both}.footer-nav i{transition:.3s;color:#999;vertical-align:baseline}.footer-nav-link{cursor:pointer;transition:.3s}.footer-nav-link:hover,.footer-nav-link:hover i{color:#409eff}.footer-nav-left{float:left;margin-left:-4px}.footer-nav-right{float:right;margin-right:-4px}.demo-block.demo-alert .el-alert{margin:20px 0 0}.demo-block.demo-alert .el-alert:first-child{margin:0}.demo-badge.demo-block .el-dropdown{vertical-align:middle}.demo-badge.demo-block .share-button{width:36px;padding:10px}.demo-badge.demo-block .mark{margin-top:8px;line-height:1;float:right}.demo-badge.demo-block .item{margin-right:40px}.demo-border .text{width:15%}.demo-border .line{width:70%}.demo-border .line div{width:100%;height:0;border-top:1px solid #eee}.demo-border .line .dashed{border-top:2px dashed #eee}.demo-shadow{height:100px;width:50%;border:1px solid #eee}.demo-shadow-text{line-height:50px;color:#666;font-size:14px}.demo-radius .title{color:#666;font-size:18px;margin:10px 0}.demo-radius .value{color:#333;font-size:16px;margin:10px 0}.demo-radius .radius{height:60px;width:70%;border:1px solid #d7dae2;border-radius:0;margin-top:20px}.demo-radius .radius-30{border-radius:30px}.demo-block.demo-button .el-row{margin-bottom:20px}.demo-block.demo-button .el-row:last-child{margin-bottom:0}.demo-block.demo-button .el-button+.el-button{margin-left:10px}.demo-block.demo-button .el-button-group .el-button+.el-button{margin-left:0}.demo-block.demo-button .el-button-group+.el-button-group{margin-left:10px}.demo-calendar.demo-block .is-selected{color:#1989fa}.demo-block.demo-card .text{font-size:14px}.demo-block.demo-card .time{font-size:13px;color:#999}.demo-block.demo-card .bottom{margin-top:13px;line-height:12px}.demo-block.demo-card .item{margin-bottom:18px}.demo-block.demo-card .button{padding:0;float:right}.demo-block.demo-card .image{width:100%;display:block}.demo-block.demo-card .box-card{width:480px}.demo-carousel .block{padding:30px;text-align:center;border-right:1px solid #eff2f6;display:inline-block;width:49%;box-sizing:border-box}.demo-carousel .block:last-child{border-right:none}.demo-carousel .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-carousel .el-carousel__container{text-align:center}.demo-carousel .el-carousel__item h3{color:#fff;font-size:18px;line-height:300px;margin:0}.demo-carousel .el-carousel__item h3.small{font-size:14px;line-height:150px}.demo-carousel .el-carousel__item h3.medium{font-size:14px;line-height:200px}.demo-carousel .el-carousel__item:nth-child(2n){background-color:#99a9bf}.demo-carousel .el-carousel__item:nth-child(odd){background-color:#d3dce6}.demo-cascader .el-cascader{width:222px}.demo-cascader-size .el-cascader{vertical-align:top;margin-right:15px}.demo-cascader .source>div{display:flex}.demo-cascader .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;width:50%;box-sizing:border-box}.demo-cascader .block:last-child{border-right:none}.demo-cascader .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-collapse .el-collapse-item__header .header-icon{margin-left:5px}.demo-color-picker .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;display:inline-block;width:50%;box-sizing:border-box}.demo-color-picker .block:last-child{border-right:none}.demo-color-picker .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-color-picker .el-color-picker+.el-color-picker{margin-left:20px}.demo-color-box{position:relative;border-radius:4px;padding:20px;margin:5px 0;height:114px;box-sizing:border-box;color:#fff;font-size:14px}.demo-color-box .value{font-size:12px;opacity:.69;line-height:24px}.demo-color-box-other{height:74px;margin:10px 0!important;border-radius:4px 4px 4px 4px!important;padding:15px 20px}.demo-color-box-group .demo-color-box{border-radius:0;margin:0}.demo-color-box-group .demo-color-box:first-child{border-radius:4px 4px 0 0}.bg-color-sub,.demo-color-box-group .demo-color-box:last-child{border-radius:0 0 4px 4px}.bg-color-sub{width:100%;height:40px;left:0;bottom:0;position:absolute}.bg-blue-sub-item{width:11.1111111%;height:100%;display:inline-block}.bg-blue-sub-item:first-child{border-radius:0 0 0 4px}.bg-success-sub-item{width:50%;height:100%;display:inline-block}.bg-success-sub-item:first-child{border-radius:0 0 0 4px}.bg-success-sub-item:last-child{border-radius:0 0 4px 0}.bg-transparent{border:1px solid #fcc3c3;color:#303133;background:url("data:image/svg+xml;utf8,");background-repeat:no-repeat;background-position:50%;background-size:100% 100%,auto}.demo-color-box-lite{color:#303133}.el-footer,.el-header{background-color:#b3c0d1;color:#333;line-height:60px}.el-aside{color:#333}#chang-jian-ye-mian-bu-ju+.demo-container .el-footer,#chang-jian-ye-mian-bu-ju+.demo-container .el-header{text-align:center}#chang-jian-ye-mian-bu-ju+.demo-container .el-aside{background-color:#d3dce6;text-align:center;line-height:200px}#chang-jian-ye-mian-bu-ju+.demo-container .el-main{background-color:#e9eef3;color:#333;text-align:center;line-height:160px}#chang-jian-ye-mian-bu-ju+.demo-container>.source>.el-container{margin-bottom:40px}#chang-jian-ye-mian-bu-ju+.demo-container>.source>.el-container:nth-child(5) .el-aside,#chang-jian-ye-mian-bu-ju+.demo-container>.source>.el-container:nth-child(6) .el-aside{line-height:260px}#chang-jian-ye-mian-bu-ju+.demo-container>.source>.el-container:nth-child(7) .el-aside{line-height:320px}.demo-block.demo-date-picker .source>div{padding:0;display:flex;flex-wrap:wrap}.demo-date-picker .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;flex:1}.demo-date-picker .block:last-child{border-right:none}.demo-date-picker .container{flex:1;border-right:1px solid #eff2f6}.demo-date-picker .container .block{border-right:none}.demo-date-picker .container .block:last-child{border-top:1px solid #eff2f6}.demo-date-picker .container:last-child{border-right:none}.demo-date-picker .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-block.demo-datetime-picker .source>div{padding:0;display:flex}.demo-datetime-picker .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;flex:1}.demo-datetime-picker .block:last-child{border-right:none}.demo-datetime-picker .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-block.demo-dialog .dialog-footer button:first-child{margin-right:10px}.demo-block.demo-dialog .full-image{width:100%}.demo-block.demo-dialog .el-dialog__wrapper{margin:0}.demo-block.demo-dialog .el-input,.demo-block.demo-dialog .el-select{width:300px}.demo-block.demo-dialog .el-button--text{margin-right:15px}.demo-block .el-dropdown{vertical-align:top}.demo-block .el-dropdown+.el-dropdown{margin-left:15px}.demo-block .el-dropdown-link{cursor:pointer;color:#409eff}.demo-block .el-icon-arrow-down{font-size:12px}.block-col-2{margin:-24px}.block-col-2 .el-col{padding:30px 0;text-align:center;border-right:1px solid #eff2f6}.block-col-2 .el-col:last-child{border-right:0}.demo-dropdown .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-form .el-select .el-input{width:380px}.demo-form .el-form{width:460px}.demo-form .line{text-align:center}.demo-form .el-checkbox-group{width:320px;margin:0;padding:0;list-style:none}.demo-form .el-checkbox-group:after,.demo-form .el-checkbox-group:before{content:" ";display:table}.demo-form .el-checkbox-group:after{clear:both;visibility:hidden;font-size:0;height:0}.demo-form .el-checkbox-group .el-checkbox{float:left;width:160px;margin:0;padding:0}.demo-form .el-checkbox-group .el-checkbox+.el-checkbox{margin-left:0}.demo-form .demo-form-normal{width:460px}.demo-form .demo-form-inline{width:auto}.demo-form .demo-form-inline .el-input{width:150px}.demo-form .demo-form-inline>*{margin-right:10px}.demo-form .demo-ruleForm{width:460px}.demo-form .demo-ruleForm .el-select .el-input{width:360px}.demo-form .demo-dynamic .el-input{margin-right:10px;width:270px;vertical-align:top}.demo-form .fr{float:right}ul.language-list{color:#5e6d82;font-size:14px;padding-left:20px}ul.language-list li{line-height:1.8}.demo-icon .source>div>i{color:#606266;margin:0 20px;font-size:1.5em;vertical-align:middle}.demo-icon .source button{margin:0 20px}.page-component .content>ul.icon-list{overflow:hidden;list-style:none;padding:0!important;border:1px solid #eaeefb;border-radius:4px}.icon-list li{float:left;width:16.66%;text-align:center;height:120px;line-height:120px;color:#666;font-size:13px;border-right:1px solid #eee;border-bottom:1px solid #eee;margin-right:-1px;margin-bottom:-1px}.icon-list li:after{content:"";height:100%}.icon-list li:after,.icon-list li span{display:inline-block;vertical-align:middle}.icon-list li span{line-height:normal;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;color:#99a9bf;transition:color .15s linear}.icon-list li i{display:block;font-size:32px;margin-bottom:15px;color:#606266;transition:color .15s linear}.icon-list li .icon-name{display:inline-block;padding:0 3px;height:1em}.icon-list li:hover i,.icon-list li:hover span{color:#5cb6ff}.demo-block.demo-input-number .el-input-number+.el-input-number{margin-left:10px}.demo-input .el-select .el-input{width:130px}.demo-input .el-input{width:180px}.demo-input .el-textarea{width:414px}.demo-input .el-input-group{width:100%}.demo-input .demo-input-size .el-input{vertical-align:top;margin:0 10px 10px 0}.demo-input .input-with-select .el-input-group__prepend{background-color:#fff}.demo-input .demo-autocomplete{text-align:center}.demo-input .demo-autocomplete .sub-title{margin-bottom:10px;font-size:14px;color:#8492a6}.demo-input .demo-autocomplete .el-col:not(:last-child){border-right:1px solid rgba(224,230,237,.5)}.demo-input .demo-autocomplete .el-autocomplete{text-align:left}.el-autocomplete-suggestion.my-autocomplete li{line-height:normal;padding-top:7px;padding-bottom:7px}.el-autocomplete-suggestion.my-autocomplete li .name{text-overflow:ellipsis;overflow:hidden}.el-autocomplete-suggestion.my-autocomplete li .addr{font-size:12px;color:#b4b4b4}.el-autocomplete-suggestion.my-autocomplete li .highlighted .addr{color:#ddd}.demo-input-suffix{margin-bottom:15px}.demo-input-suffix .el-input{margin-right:15px}.demo-layout .el-row{margin-bottom:20px}.demo-layout .el-row:last-child{margin-bottom:0}.demo-layout .el-col{border-radius:4px}.demo-layout .bg-purple-dark{background:#99a9bf}.demo-layout .bg-purple{background:#d3dce6}.demo-layout .bg-purple-light{background:#e5e9f2}.demo-layout .grid-content{border-radius:4px;min-height:36px}.demo-layout .row-bg{padding:10px 0;background-color:#f9fafc}.demo-loading .el-table{border:none}.demo-block.demo-menu .el-menu-demo{padding-left:55px}.demo-block.demo-menu .el-menu-vertical-demo:not(.el-menu--collapse){width:240px;min-height:400px}.demo-block.demo-menu .line{height:1px;background-color:#e0e6ed;margin:35px -24px}.demo-block.demo-menu h5{font-size:14px;color:#8492a6;margin-top:10px}.demo-block.demo-menu .tac{text-align:center}.demo-block.demo-menu .tac .el-menu-vertical-demo{display:inline-block;text-align:left}.demo-pagination .source.first{padding:0}.demo-pagination .first .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;display:inline-block;width:50%;box-sizing:border-box}.demo-pagination .first .block:last-child{border-right:none}.demo-pagination .first .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-pagination .source.last{padding:0}.demo-pagination .last .block{padding:30px 24px;border-bottom:1px solid #eff2f6}.demo-pagination .last .block:last-child{border-bottom:none}.demo-pagination .last .demonstration{font-size:14px;color:#8492a6;line-height:44px}.demo-pagination .last .demonstration+.el-pagination{width:70%;margin:5px 20px 0 0}.demo-block.demo-popover .el-popover+.el-popover{margin-left:10px}.demo-block.demo-popover .el-input{width:360px}.demo-block.demo-popover .el-button{margin-left:10px}.demo-block.demo-progress .el-progress--line{margin-bottom:15px;width:350px}.demo-block.demo-progress .el-progress--circle{margin-right:15px}.demo-rate .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;display:inline-block;width:49%;box-sizing:border-box}.demo-rate .block:last-child{border-right:none}.demo-rate .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-select .el-select{width:240px}.demo-block.demo-slider .source{padding:0}.demo-block.demo-slider .block{padding:30px 24px;overflow:hidden;border-bottom:1px solid #eff2f6}.demo-block.demo-slider .block:last-child{border-bottom:none}.demo-block.demo-slider .demonstration{font-size:14px;color:#8492a6;line-height:44px}.demo-block.demo-slider .demonstration+.el-slider{float:right;width:70%;margin-right:20px}.demo-block.demo-switch .el-switch{margin:20px 20px 20px 0}.el-table .warning-row{background:#fdf5e6}.el-table .success-row{background:#f0f9eb}.demo-table .name-wrapper{display:inline-block}.demo-table .demo-table-expand label{width:90px;color:#99a9bf}.demo-table .demo-table-expand .el-form-item{margin-right:0;margin-bottom:0;width:50%}.demo-block.demo-tag .el-tag+.el-tag{margin-left:10px}.demo-block.demo-tag .button-new-tag{margin-left:10px;height:32px;line-height:30px;padding-top:0;padding-bottom:0}.demo-block.demo-tag .input-new-tag{width:90px;margin-left:10px;vertical-align:bottom}.demo-block.demo-tag .tag-group{display:flex;align-items:center}.demo-block.demo-tag .tag-group__title{width:45px;font-size:14px;color:#606266}.demo-block.demo-tag .tag-group+.tag-group{margin-top:10px}.demo-block .el-date-editor+.el-date-editor{margin-left:10px}.demo-timeline .source .radio{margin-bottom:20px}.demo-timeline .source .radio .el-radio-group{margin-left:20px}.demo-tooltip .el-tooltip+.el-tooltip{margin-left:15px}.demo-tooltip .box{width:400px}.demo-tooltip .box .top{text-align:center}.demo-tooltip .box .left{float:left;width:60px}.demo-tooltip .box .right{float:right;width:60px}.demo-tooltip .box .bottom{clear:both;text-align:center}.demo-tooltip .box .item{margin:4px}.demo-tooltip .box .left .el-tooltip__popper,.demo-tooltip .box .right .el-tooltip__popper{padding:8px 10px}.demo-tooltip .box .el-tooltip{margin-left:0}.demo-transition .transition-box{margin-bottom:10px;width:200px;height:100px;border-radius:4px;background-color:#409eff;text-align:center;color:#fff;padding:40px 20px;margin-right:20px;box-sizing:border-box}.demo-transfer .transfer-footer{margin-left:15px;padding:6px 5px}.demo-tree .leaf{width:20px;background:#ddd}.demo-tree .folder{width:20px;background:#888}.demo-tree .buttons,.demo-tree .filter-tree{margin-top:20px}.demo-tree .custom-tree-container{display:flex;margin:-24px}.demo-tree .block{flex:1;padding:8px 24px 24px}.demo-tree .block:first-child{border-right:1px solid #eff2f6}.demo-tree .block>p{text-align:center;margin:0;line-height:4}.demo-tree .custom-tree-node{flex:1;display:flex;align-items:center;justify-content:space-between;font-size:14px;padding-right:8px}.demo-typo-size .color-dark-light{color:#99a9bf}.demo-term-box img{width:24%;margin:0 4% 20px 0}.lineH-left{display:inline-block;height:80px}.lineH-right{display:inline-block;list-style:none;padding:0 0 0 90px;margin:0;vertical-align:top}.lineH-right li{font-size:13px;color:#666;height:20px;line-height:20px}.lineH-right li span{padding-left:40px}.upload-tip{color:#8492a6;font-size:12px;margin-top:7px}.demo-block{margin-bottom:24px}.demo-block .upload-demo{width:360px}.demo-block .avatar-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.demo-block .avatar-uploader .el-upload:focus,.demo-block .avatar-uploader .el-upload:hover{border-color:#409eff}.demo-block .avatar-uploader .avatar-uploader-icon{font-size:28px;color:#8c939d;width:178px;height:178px;line-height:178px;text-align:center}.demo-block .avatar-uploader .avatar{width:178px;height:178px;display:block}.demo-divider-container-1{display:inline-block;width:33%}.demo-divider-container-2{display:inline-block;width:50%}@keyframes dot{0%{width:0;margin-right:1em}to{width:1em;margin-right:0}}.demo-image .block,.demo-image__error .block,.demo-image__placeholder .block{padding:30px 0;text-align:center;border-right:1px solid #eff2f6;display:inline-block;width:20%;box-sizing:border-box;vertical-align:top}.demo-image .block:last-child,.demo-image__error .block:last-child,.demo-image__placeholder .block:last-child{border-right:none}.demo-image .demonstration,.demo-image__error .demonstration,.demo-image__placeholder .demonstration{display:block;color:#8492a6;font-size:14px;margin-bottom:20px}.demo-image__error .block,.demo-image__placeholder .block{width:49%}.demo-image__error .el-image,.demo-image__placeholder .el-image{width:300px;height:200px}.demo-image__error .image-slot,.demo-image__placeholder .image-slot{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:#f5f7fa;color:#909399;font-size:14px}.demo-image__placeholder .dot{animation:dot 2s steps(3,start) infinite;overflow:hidden}.demo-image__error .image-slot{font-size:30px}.demo-image__lazy{height:400px;overflow-y:auto}.demo-image__lazy .el-image{display:block;min-height:200px;margin-bottom:10px}.demo-image__lazy .el-image:last-child{margin-bottom:0}.infinite-list{height:300px;padding:0;margin:0;list-style:none}.infinite-list .infinite-list-item{display:flex;align-items:center;justify-content:center;height:50px;background:#e8f3fe;margin:10px;color:#7dbcfc}.infinite-list .infinite-list-item+.list-item{margin-top:10px}.infinite-list-wrapper{height:300px;text-align:center}.infinite-list-wrapper .list{padding:0;margin:0;list-style:none}.infinite-list-wrapper .list-item{display:flex;align-items:center;justify-content:center;height:50px;background:#fff6f6;color:#ff8484}.infinite-list-wrapper .list-item+.list-item{margin-top:10px}.demo-avatar.demo-basic{text-align:center}.demo-avatar.demo-basic .demo-basic--circle,.demo-avatar.demo-basic .demo-basic--square{display:flex;justify-content:space-between;align-items:center}.demo-avatar.demo-basic .demo-basic--circle .block,.demo-avatar.demo-basic .demo-basic--square .block{flex:1}.demo-avatar.demo-basic .demo-basic--circle .block:not(:last-child),.demo-avatar.demo-basic .demo-basic--square .block:not(:last-child){border-right:1px solid rgba(224,230,237,.5)}.demo-avatar .sub-title{margin-bottom:10px;font-size:14px;color:#8492a6}.demo-avatar .el-col:not(:last-child){border-right:1px solid rgba(224,230,237,.5)}.demo-avatar .demo-type{display:flex}.demo-avatar .demo-type>div{flex:1;text-align:center}.demo-avatar .demo-type>div:not(:last-child){border-right:1px solid rgba(224,230,237,.5)}.demo-avatar .demo-fit{display:flex;text-align:center;justify-content:space-between}.demo-avatar .demo-fit .block{flex:1;display:flex;flex-direction:column;flex-grow:0}.demo-avatar .demo-fit .title{margin-bottom:10px;font-size:14px;color:#8492a6}.demo-drawer__content{display:flex;flex-direction:column;height:100%}.demo-drawer__content form{flex:1}.demo-drawer__footer{display:flex}.demo-drawer__footer button{flex:1}.el-drawer__body{padding:20px}.demo-block.demo-skeleton .el-card{margin-bottom:16px}.demo-block.demo-skeleton .card-header{display:flex;justify-content:space-between;align-items:center}.demo-block.demo-skeleton .time{font-size:13px;color:#999}.demo-block.demo-skeleton .bottom{margin-top:13px;line-height:12px}.demo-block.demo-skeleton .button{padding:0;min-height:auto}.demo-block.demo-skeleton .image{width:100%;display:block}.demo-block.demo-skeleton .image.multi-content{width:400px;height:267px}.demo-block.demo-skeleton .clearfix:after,.demo-block.demo-skeleton .clearfix:before{display:table;content:""}.demo-block.demo-skeleton .clearfix:after{clear:both}.demo-block.demo-descriptions .margin-top{margin-top:20px}.demo-block.demo-descriptions .my-label{background:#e1f3d8}.demo-block.demo-descriptions .my-content{background:#fde2e2}body,html{margin:0;padding:0;height:100%;font-family:Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,SimSun,sans-serif;font-weight:400;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}body.is-component,html.is-component{overflow:hidden}#app{height:100%}#app.is-component{overflow-y:hidden}#app.is-component .main-cnt{padding:0;margin-top:0;height:100%;min-height:auto}#app.is-component .headerWrapper{position:fixed;width:100%;left:0;top:0;z-index:1500}#app.is-component .headerWrapper .container{padding:0}a{color:#409eff;text-decoration:none}code{background-color:#f9fafc;padding:0 4px;border:1px solid #eaeefb;border-radius:4px}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}.hljs{line-height:1.8;font-family:Menlo,Monaco,Consolas,Courier,monospace;font-size:12px;padding:18px 24px;background-color:#fafafa;border:1px solid #eaeefb;margin-bottom:25px;border-radius:4px;-webkit-font-smoothing:auto}.main-cnt{margin-top:-80px;padding:80px 0 340px;box-sizing:border-box;min-height:100%}.container,.page-container{width:1140px;padding:0;margin:0 auto}.page-container{padding-top:55px}.page-container h2{font-size:28px;color:#1f2d3d;margin:0}.page-container h3{font-size:22px}.page-container h2,.page-container h3,.page-container h4,.page-container h5{font-weight:400;color:#1f2f3d}.page-container h2:hover a,.page-container h3:hover a,.page-container h4:hover a,.page-container h5:hover a{opacity:.4}.page-container h2 a,.page-container h3 a,.page-container h4 a,.page-container h5 a{float:left;margin-left:-20px;opacity:0;cursor:pointer}.page-container h2 a:hover,.page-container h3 a:hover,.page-container h4 a:hover,.page-container h5 a:hover{opacity:.4}.page-container p{font-size:14px;color:#5e6d82;line-height:1.5em}.page-container .tip{padding:8px 16px;background-color:#ecf8ff;border-radius:4px;border-left:5px solid #50bfff;margin:20px 0}.page-container .tip code{background-color:hsla(0,0%,100%,.7);color:#445368}.page-container .warning{padding:8px 16px;background-color:#fff6f7;border-radius:4px;border-left:5px solid #fe6c6f;margin:20px 0}.page-container .warning code{background-color:hsla(0,0%,100%,.7);color:#445368}.demo{margin:20px 0}@media (max-width:1140px){.container,.page-container{width:100%}}@media (max-width:768px){.container,.page-container{padding:0 20px}#app.is-component .headerWrapper .container{padding:0 12px}}@font-face{font-family:icomoon;src:url(data:application/vnd.ms-fontobject;base64,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);src:url(data:application/vnd.ms-fontobject;base64,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#iefix) format("embedded-opentype"),url(data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBccAAAC8AAAAYGNtYXAXVtKKAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZsdxmDoAAAF4AAAD1GhlYWQK1CI1AAAFTAAAADZoaGVhB8IDyQAABYQAAAAkaG10eBYAAAAAAAWoAAAAIGxvY2EDFAH+AAAFyAAAABJtYXhwAA4AbwAABdwAAAAgbmFtZZlKCfsAAAX8AAABhnBvc3QAAwAAAAAHhAAAACAAAwOaAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAwPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QP//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAFAAD/wAQAA8AAEwAnADUAQwBRAAATND4CMzIeAhUUDgIjIi4CJTQuAiMiDgIVFB4CMzI+AiU0NjMyFh0BFAYjIiY1JTQ2MzIWHQEUBiMiJjUBIgYVFBYzITI2NTQmIwBQi7tqaruLUFCLu2pqu4tQA7NEdp9aWp92RER2n1pan3ZE/XMeFhUeHhUWHgFNHhUWHh4WFR7+9hEYGBEBLhEYGBEBwGq7i1BQi7tqaruLUFCLu2pan3ZERHafWlqfdkREdp/nFR4eFTMWHh4WMxUeHhUzFh4eFv8AGRERGRkRERkAAAAEAAD/wAQAA8AAEwAhAC8ATwAAASIOAhUUHgIzMj4CNTQuAgE0NjMyFh0BFAYjIiY1JTQ2MzIWHQEUBiMiJjUTJy4BIyIGDwEOASMiJjU0NjcnNz4BMzIWFx4BFRQGJwIAaruLUFCLu2pqu4tQUIu7/rweFhUeHhUWHgFNHhUWHh4WFR5EBCpaLzBbKgQBBQIQFQYGAQoyazU2aTMJChwTA8BQi7tqaruLUFCLu2pqu4tQ/o0VHh4VMxYeHhYzFR4eFTMWHh4W/psBFRUVFQEBARgRCA8GAwUYGhkaBRMMExoGAAAEAAD/wAQAA8AAEwAhAC8APQAABSIuAjU0PgIzMh4CFRQOAgEVFBYzMjY9ATQmIyIGBRUUFjMyNj0BNCYjIgYBIgYVFBYzITI2NTQmIwIAaruLUFCLu2pqu4tQUIu7/rweFhUeHhUWHgFNHhUWHh4WFR7+9hEYGBEBLhEYGBFAUIu7amq7i1BQi7tqaruLUAKNMxYeHhYzFR4eFTMWHh4WMxUeHv64GRERGRkRERkAAAQAAP/ABAADwAATAFAAXgBsAAABIg4CFRQeAjMyPgI1NC4CExQGFQ4BFQ4DIzgBMTgBMSIuAic0Jic0JjUuATU0Njc+ATMyFhcxHgEzMjY3MT4BMzIWFx4BFRQGBwM0NjMyFh0BFAYjIiY1JTQ2MzIWHQEUBiMiJjUCAGq7i1BQi7tqaruLUFCLu8cBAQEVP01bMjJbTT8VAQEBAQECAgUVDAwVBSB4S0t4IAUVDAwVBQICAQG+HhUWHh4WFR7+sx4WFR4eFRYeA8BQi7tqaruLUFCLu2pqu4tQ/XICAgEBAgEpQjAbGzBCKQECAQECAgIGAwUJBAsMDAs9TEw9CwwMCwQJBQMGAgEbFR4eFTMWHh4WMxUeHhUzFh4eFgAAAAEAAAAAAADYdr5rXw889QALBAAAAAAA09ru3AAAAADT2u7cAAD/wAQAA8AAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAgEAAAAAAAAAAAAAAACAAAABAAAAAQAAAAEAAAABAAAAAAAAAAACgAUAB4AkAECAVoB6gAAAAEAAAAIAG0ABQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format("truetype"),url(data:font/woff;base64,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) format("woff"),url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxmb250IGlkPSJpY29tb29uIiBob3Jpei1hZHYteD0iMTAyNCI+PGZvbnQtZmFjZSB1bml0cy1wZXItZW09IjEwMjQiIGFzY2VudD0iOTYwIiBkZXNjZW50PSItNjQiLz48Z2x5cGggaG9yaXotYWR2LXg9IjUxMiIvPjxnbHlwaCB1bmljb2RlPSLupIAiIGdseXBoLW5hbWU9InJhdGUtZmFjZS1vZmYiIGQ9Ik0wIDQ0OGMwIDI4Mi43NjYgMjI5LjIzNCA1MTIgNTEyIDUxMnM1MTItMjI5LjIzNCA1MTItNTEyYzAtMjgyLjc2Ni0yMjkuMjM0LTUxMi01MTItNTEyUzAgMTY1LjIzNCAwIDQ0OHptOTQ3LjIgMGMwIDI0MC4zNTEtMTk0Ljg0OSA0MzUuMi00MzUuMiA0MzUuMlM3Ni44IDY4OC4zNTEgNzYuOCA0NDggMjcxLjY0OSAxMi44IDUxMiAxMi44IDk0Ny4yIDIwNy42NDkgOTQ3LjIgNDQ4ek0yOTQuNCA1ODguODUzQzI5NC40IDYxNy4xIDMxNy4xMjYgNjQwIDM0NS42IDY0MGMyOC4yNzcgMCA1MS4yLTIyLjY2NCA1MS4yLTUxLjE0N3YtNTEuMzA3YzAtMjguMjQ3LTIyLjcyNi01MS4xNDctNTEuMi01MS4xNDctMjguMjc3IDAtNTEuMiAyMi42NjQtNTEuMiA1MS4xNDd2NTEuMzA3em0zMzIuOCAwQzYyNy4yIDYxNy4xIDY0OS45MjYgNjQwIDY3OC40IDY0MGMyOC4yNzcgMCA1MS4yLTIyLjY2NCA1MS4yLTUxLjE0N3YtNTEuMzA3YzAtMjguMjQ3LTIyLjcyNi01MS4xNDctNTEuMi01MS4xNDctMjguMjc3IDAtNTEuMiAyMi42NjQtNTEuMiA1MS4xNDd2NTEuMzA3ek0zNjEuMTQzIDI4MS42QzMzOC40MzIgMjgxLjYgMzIwIDI2Mi45NjMgMzIwIDI0MHMxOC40MzItNDEuNiA0MS4xNDMtNDEuNmgzMDEuNzE0QzY4NS41NjggMTk4LjQgNzA0IDIxNy4wMzcgNzA0IDI0MHMtMTguNDMyIDQxLjYtNDEuMTQzIDQxLjZIMzYxLjE0M3oiLz48Z2x5cGggdW5pY29kZT0i7qSBIiBnbHlwaC1uYW1lPSJyYXRlLWZhY2UtMSIgZD0iTTUxMi4wMDEgOTYwQzIyOS4yMyA5NjAgMCA3MzAuNzcgMCA0NDcuOTk4IDAgMTY1LjIyOCAyMjkuMjMtNjQgNTEyLjAwMS02NCA3OTQuNzctNjQgMTAyNCAxNjUuMjI3IDEwMjQgNDQ3Ljk5OFM3OTQuNzcgOTYwIDUxMi4wMDEgOTYwek0yOTQuNCA1ODguODUzQzI5NC40IDYxNy4xIDMxNy4xMjYgNjQwIDM0NS42IDY0MGMyOC4yNzcgMCA1MS4yLTIyLjY2NCA1MS4yLTUxLjE0N3YtNTEuMzA3YzAtMjguMjQ3LTIyLjcyNi01MS4xNDctNTEuMi01MS4xNDctMjguMjc3IDAtNTEuMiAyMi42NjQtNTEuMiA1MS4xNDd2NTEuMzA3em0zMzIuOCAwQzYyNy4yIDYxNy4xIDY0OS45MjYgNjQwIDY3OC40IDY0MGMyOC4yNzcgMCA1MS4yLTIyLjY2NCA1MS4yLTUxLjE0N3YtNTEuMzA3YzAtMjguMjQ3LTIyLjcyNi01MS4xNDctNTEuMi01MS4xNDctMjguMjc3IDAtNTEuMiAyMi42NjQtNTEuMiA1MS4xNDd2NTEuMzA3em02Ny4zMjktNDA3LjY1NmwtMy40MjIgMS4yMTZjLTU2LjE1IDI3Ljg3Mi0xMTYuMzg4IDQyLjA0Ny0xNzguODgyIDQyLjA0Ny02NC41NTYgMC0xMjUuNjExLTE0LjMxNi0xODEuNTE1LTQyLjQ1bC0zLjM4Mi0xLjEzMmMtMi4xMDItLjYyOC00Ljk0NS0xLjUyOS04LjQ4OS0xLjUyOS0yMC41NTQgMC0zNy4yMzkgMTguMjktMzcuMjM5IDQwLjczNCAwIDEwLjY1NSA0LjU3MSAyMS4zNjEgMTIuMTE0IDI5LjM5OWwtLjQ1NiAyLjQ4MyA5LjUxNiA0LjY5OGM2Ni43NCAzMy4xMDQgMTM5LjMzNiA1MC41MzcgMjA5LjkwNyA1MC41MzcgNzEuODg5IDAgMTQyLjMzNi0xNi45ODQgMjEwLjMxNC01MC45NDggMTEuOTQzLTcuMTgxIDE5LjQwNS0yMC45NTMgMTkuNDA1LTM1LjkwMyAwLTI2LjMyOC0yMS43MS00Ny45NTgtNDcuODcxLTM5LjE1M3oiLz48Z2x5cGggdW5pY29kZT0i7qSCIiBnbHlwaC1uYW1lPSJyYXRlLWZhY2UtMiIgZD0iTTUxMi02NEMyMjkuMjM0LTY0IDAgMTY1LjIzNCAwIDQ0OHMyMjkuMjM0IDUxMiA1MTIgNTEyYzI4Mi43NjYgMCA1MTItMjI5LjIzNCA1MTItNTEyUzc5NC43NjYtNjQgNTEyLTY0ek0yOTQuNCA1ODguODUzdi01MS4zMDdjMC0yOC40ODIgMjIuOTIzLTUxLjE0NyA1MS4yLTUxLjE0NyAyOC40NzQgMCA1MS4yIDIyLjg5OSA1MS4yIDUxLjE0N3Y1MS4zMDdjMCAyOC40ODItMjIuOTIzIDUxLjE0Ny01MS4yIDUxLjE0Ny0yOC40NzQgMC01MS4yLTIyLjg5OS01MS4yLTUxLjE0N3ptMzMyLjggMHYtNTEuMzA3YzAtMjguNDgyIDIyLjkyMy01MS4xNDcgNTEuMi01MS4xNDcgMjguNDc0IDAgNTEuMiAyMi44OTkgNTEuMiA1MS4xNDd2NTEuMzA3YzAgMjguNDgyLTIyLjkyMyA1MS4xNDctNTEuMiA1MS4xNDctMjguNDc0IDAtNTEuMi0yMi44OTktNTEuMi01MS4xNDd6TTM2MS4xNDMgMjgxLjZDMzM4LjQzMiAyODEuNiAzMjAgMjYyLjk2MyAzMjAgMjQwczE4LjQzMi00MS42IDQxLjE0My00MS42aDMwMS43MTRDNjg1LjU2OCAxOTguNCA3MDQgMjE3LjAzNyA3MDQgMjQwcy0xOC40MzIgNDEuNi00MS4xNDMgNDEuNkgzNjEuMTQzeiIvPjxnbHlwaCB1bmljb2RlPSLupIMiIGdseXBoLW5hbWU9InJhdGUtZmFjZS0zIiBkPSJNNTEyLjAwMSA5NjBDMjI5LjIzMSA5NjAgMCA3MzAuNzcgMCA0NDguMDAxUzIyOS4yMy02NCA1MTIuMDAxLTY0Qzc5NC43NzEtNjQgMTAyNCAxNjUuMjMgMTAyNCA0NDcuOTk5Uzc5NC43NzEgOTYwIDUxMi4wMDEgOTYwem0zMDUuNDk0LTY1NC40MzVhNDAuNDA2IDQwLjQwNiAwIDAgMC0xLjU2OS00LjM1IDQwLjg1IDQwLjg1IDAgMCAwLTIuMzE3LTQuNTU2Qzc1Ny45NzggMTg5LjA0NiA2NDQuMDkxIDExNS4yIDUxMi4yODYgMTE1LjJsLS4yODYuMDAyLS4yODYtLjAwMmMtMTMxLjgwNCAwLTI0NS42OTMgNzMuODQ1LTMwMS4zMjMgMTgxLjQ1OWE0MC44NSA0MC44NSAwIDAgMC0yLjMxNyA0LjU1NiA0MC4zMjggNDAuMzI4IDAgMCAwLTEuNTY5IDQuMzUgNDAuMzE3IDQwLjMxNyAwIDAgMC0xLjcwNSAxMS41OTcgNDAuMzE0IDQwLjMxNCAwIDAgMCA0LjM3MiAxOC4yODJjNi44OTcgMTMuNjAxIDIxLjIzOSAyMi45NTUgMzcuODIyIDIyLjk1NXMzMC45MjctOS4zNTUgMzcuODIzLTIyLjk1NWguNjc2QzMyNi45MDQgMjUzLjk5MSA0MTIuNjI0IDE5Ny45IDUxMiAxOTcuNzkyYzk5LjM3NS4xMDggMTg1LjA5NSA1Ni4yIDIyNi41MDcgMTM3LjY1MmguNjc2YzYuODk3IDEzLjYwMSAyMS4yMzkgMjIuOTU1IDM3LjgyMyAyMi45NTVzMzAuOTI3LTkuMzU1IDM3LjgyMi0yMi45NTVhNDAuMjk4IDQwLjI5OCAwIDAgMCA0LjM3Mi0xOC4yODJjMC00LjAyOS0uNjAyLTcuOTE4LTEuNzA1LTExLjU5N3pNNjI3LjIgNTg4Ljg1M0M2MjcuMiA2MTcuMSA2NDkuOTI2IDY0MCA2NzguNCA2NDBjMjguMjc3IDAgNTEuMi0yMi42NjQgNTEuMi01MS4xNDd2LTUxLjMwN2MwLTI4LjI0Ny0yMi43MjYtNTEuMTQ3LTUxLjItNTEuMTQ3LTI4LjI3NyAwLTUxLjIgMjIuNjY0LTUxLjIgNTEuMTQ3djUxLjMwN3ptLTMzMi44IDBDMjk0LjQgNjE3LjEgMzE3LjEyNiA2NDAgMzQ1LjYgNjQwYzI4LjI3NyAwIDUxLjItMjIuNjY0IDUxLjItNTEuMTQ3di01MS4zMDdjMC0yOC4yNDctMjIuNzI2LTUxLjE0Ny01MS4yLTUxLjE0Ny0yOC4yNzcgMC01MS4yIDIyLjY2NC01MS4yIDUxLjE0N3Y1MS4zMDd6Ii8+PC9mb250PjwvZGVmcz48L3N2Zz4=) format("svg");font-weight:400;font-style:normal}[class*=" icon-"],[class^=icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-rate-face-off:before{content:"\e900"}.icon-rate-face-1:before{content:"\e901"}.icon-rate-face-2:before{content:"\e902"}.icon-rate-face-3:before{content:"\e903"}
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/project/surProject/index.vue b/ruoyi-ui/src/views/project/surProject/index.vue
index 580b3f57..65362f45 100644
--- a/ruoyi-ui/src/views/project/surProject/index.vue
+++ b/ruoyi-ui/src/views/project/surProject/index.vue
@@ -373,7 +373,7 @@
'project:materialSeal:list',
'project:projectDeptWroks:list',
'project:surProjectAttendance:add',
- 'project:videoConfig:list',
+ 'video:videoConfig:list',
'project:surProject:remove',
]"
>
@@ -450,7 +450,7 @@
视频配置
新增
@@ -74,7 +74,7 @@
size="mini"
:disabled="single"
@click="handleUpdate"
- v-hasPermi="['project:videoConfig:edit']"
+ v-hasPermi="['video:videoConfig:edit']"
>修改
@@ -86,7 +86,7 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
- v-hasPermi="['project:videoConfig:remove']"
+ v-hasPermi="['video:videoConfig:remove']"
>删除
@@ -97,7 +97,7 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
- v-hasPermi="['project:videoConfig:export']"
+ v-hasPermi="['video:videoConfig:export']"
>导出
@@ -140,7 +140,19 @@
show-overflow-tooltip
/>
-
+
+
+
+
+
+
实时视频视频检测
修改
删除
@@ -285,6 +297,13 @@
取 消
+
+
@@ -295,10 +314,15 @@ import {
delVideoConfig,
addVideoConfig,
updateVideoConfig,
-} from "@/api/project/videoConfig";
+ updateVideoConfigSort,
+} from "@/api/video/videoConfig";
+import videoPlayDrawer from "@/views/video/videoConfig/videoPlayDrawer";
export default {
name: "VideoConfig",
+ components: {
+ videoPlayDrawer,
+ },
dicts: ["project_video_type", "project_video_signal_state", "sys_common_isdel"],
data() {
return {
@@ -366,6 +390,10 @@ export default {
{ maxlength: 200, message: "备注最多200字符", trigger: "blur" },
],
},
+ formData: {
+ videoDvrNumber: null,
+ },
+ videoPlayDrawerVisible: false,
};
},
created() {
@@ -520,13 +548,28 @@ export default {
/** 导出按钮操作 */
handleExport() {
this.download(
- "project/videoConfig/export",
+ "video/videoConfig/export",
{
...this.queryParams,
},
`videoConfig_${new Date().getTime()}.xlsx`
);
},
+ //项目排序控制
+ setVideoSort(row, val) {
+ let param = {
+ id: row.id,
+ videoSort: val,
+ };
+ updateVideoConfigSort(param).then((response) => {
+ this.$modal.msgSuccess("修改成功");
+ this.getList();
+ });
+ },
+ handlePlay(row) {
+ this.formData.videoDvrNumber = row.videoDvrNumber;
+ this.videoPlayDrawerVisible = true;
+ },
},
};
diff --git a/ruoyi-ui/src/views/project/videoConfig/videoConfigDrawer.vue b/ruoyi-ui/src/views/video/videoConfig/videoConfigDrawer.vue
similarity index 97%
rename from ruoyi-ui/src/views/project/videoConfig/videoConfigDrawer.vue
rename to ruoyi-ui/src/views/video/videoConfig/videoConfigDrawer.vue
index 53c1dd27..6aebcdf3 100644
--- a/ruoyi-ui/src/views/project/videoConfig/videoConfigDrawer.vue
+++ b/ruoyi-ui/src/views/video/videoConfig/videoConfigDrawer.vue
@@ -22,7 +22,7 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
- v-hasPermi="['project:videoConfig:add']"
+ v-hasPermi="['video:videoConfig:add']"
>新增
@@ -34,7 +34,7 @@
size="mini"
:disabled="single"
@click="handleUpdate"
- v-hasPermi="['project:videoConfig:edit']"
+ v-hasPermi="['video:videoConfig:edit']"
>修改
@@ -46,7 +46,7 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
- v-hasPermi="['project:videoConfig:remove']"
+ v-hasPermi="['video:videoConfig:remove']"
>删除
@@ -57,7 +57,7 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
- v-hasPermi="['project:videoConfig:export']"
+ v-hasPermi="['video:videoConfig:export']"
>导出
-->
@@ -96,7 +96,7 @@
show-overflow-tooltip
/>
-
+
修改
删除
@@ -228,7 +228,7 @@ import {
delVideoConfig,
addVideoConfig,
updateVideoConfig,
-} from "@/api/project/videoConfig";
+} from "@/api/video/videoConfig";
export default {
name: "VideoConfig",
@@ -454,7 +454,7 @@ export default {
/** 导出按钮操作 */
handleExport() {
this.download(
- "project/videoConfig/export",
+ "video/videoConfig/export",
{
...this.queryParams,
},
diff --git a/ruoyi-ui/src/views/video/videoConfig/videoPlayDrawer.vue b/ruoyi-ui/src/views/video/videoConfig/videoPlayDrawer.vue
new file mode 100644
index 00000000..ba5a7805
--- /dev/null
+++ b/ruoyi-ui/src/views/video/videoConfig/videoPlayDrawer.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ruoyi-ui/src/views/video/videoList/index.vue b/ruoyi-ui/src/views/video/videoList/index.vue
new file mode 100644
index 00000000..567404a8
--- /dev/null
+++ b/ruoyi-ui/src/views/video/videoList/index.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/controller/SurProjectVideoConfigController.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/controller/SurProjectVideoConfigController.java
similarity index 59%
rename from yanzhu-jh/src/main/java/com/yanzhu/jh/project/controller/SurProjectVideoConfigController.java
rename to yanzhu-jh/src/main/java/com/yanzhu/jh/video/controller/SurProjectVideoConfigController.java
index 843e0675..50e61396 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/controller/SurProjectVideoConfigController.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/controller/SurProjectVideoConfigController.java
@@ -1,29 +1,23 @@
-package com.yanzhu.jh.project.controller;
+package com.yanzhu.jh.video.controller;
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.ruoyi.common.core.text.Convert;
-import com.ruoyi.common.enums.SysRoleEnum;
-import com.ruoyi.system.service.ISysDeptService;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.enums.BusinessType;
-import com.yanzhu.jh.project.domain.SurProjectVideoConfig;
-import com.yanzhu.jh.project.service.ISurProjectVideoConfigService;
-import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.SysRoleEnum;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.service.ISysDeptService;
+import com.yanzhu.jh.video.domain.SurProjectVideoConfig;
+import com.yanzhu.jh.video.domain.SurProjectVideoPassage;
+import com.yanzhu.jh.video.service.ISurProjectVideoConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
/**
* 视频配置Controller
@@ -32,7 +26,7 @@ import com.ruoyi.common.core.page.TableDataInfo;
* @date 2023-08-25
*/
@RestController
-@RequestMapping("/project/videoConfig")
+@RequestMapping("/video/videoConfig")
public class SurProjectVideoConfigController extends BaseController
{
@Autowired
@@ -44,7 +38,7 @@ public class SurProjectVideoConfigController extends BaseController
/**
* 查询视频配置列表
*/
- @PreAuthorize("@ss.hasPermi('project:videoConfig:list')")
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:list')")
@GetMapping("/list")
public TableDataInfo list(SurProjectVideoConfig surProjectVideoConfig)
{
@@ -60,10 +54,28 @@ public class SurProjectVideoConfigController extends BaseController
return getDataTable(list);
}
+ /**
+ * 查询视频配置列表
+ */
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:list')")
+ @GetMapping("/listView")
+ public AjaxResult listView(SurProjectVideoConfig surProjectVideoConfig)
+ {
+ surProjectVideoConfig.setNowRole(Convert.toStr(getUserFirstRole()));
+ if(SysRoleEnum.ZGS.getCode().equals(surProjectVideoConfig.getNowRole())){
+ surProjectVideoConfig.setNowDept(Convert.toStr(sysDeptService.getZGSDeptId(getDeptId())));
+ }else{
+ surProjectVideoConfig.setNowDept(Convert.toStr(getDeptId()));
+ }
+ surProjectVideoConfig.setNowUser(Convert.toStr(getUserId()));
+ List list = surProjectVideoConfigService.selectSurProjectVideoConfigList(surProjectVideoConfig);
+ return success(list);
+ }
+
/**
* 导出视频配置列表
*/
- @PreAuthorize("@ss.hasPermi('project:videoConfig:export')")
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:export')")
@Log(title = "视频配置", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, SurProjectVideoConfig surProjectVideoConfig)
@@ -83,7 +95,7 @@ public class SurProjectVideoConfigController extends BaseController
/**
* 获取视频配置详细信息
*/
- @PreAuthorize("@ss.hasPermi('project:videoConfig:query')")
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
@@ -93,7 +105,7 @@ public class SurProjectVideoConfigController extends BaseController
/**
* 新增视频配置
*/
- @PreAuthorize("@ss.hasPermi('project:videoConfig:add')")
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:add')")
@Log(title = "视频配置", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody SurProjectVideoConfig surProjectVideoConfig)
@@ -104,7 +116,7 @@ public class SurProjectVideoConfigController extends BaseController
/**
* 修改视频配置
*/
- @PreAuthorize("@ss.hasPermi('project:videoConfig:edit')")
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:edit')")
@Log(title = "视频配置", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody SurProjectVideoConfig surProjectVideoConfig)
@@ -112,14 +124,45 @@ public class SurProjectVideoConfigController extends BaseController
return toAjax(surProjectVideoConfigService.updateSurProjectVideoConfig(surProjectVideoConfig));
}
+ /**
+ * 修改视频配置
+ */
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:edit')")
+ @Log(title = "视频配置排序", businessType = BusinessType.UPDATE)
+ @PostMapping("/updateVideoConfigSort")
+ public AjaxResult updateVideoConfigSort(@RequestBody SurProjectVideoConfig surProjectVideoConfig)
+ {
+ return toAjax(surProjectVideoConfigService.updateVideoConfig(surProjectVideoConfig));
+ }
+
/**
* 删除视频配置
*/
- @PreAuthorize("@ss.hasPermi('project:videoConfig:remove')")
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:remove')")
@Log(title = "视频配置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(surProjectVideoConfigService.deleteSurProjectVideoConfigByIds(ids));
}
+
+ /**
+ * 修改视频通道状态
+ */
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:query')")
+ @PostMapping("/editPassageState")
+ public AjaxResult editPassageState(SurProjectVideoPassage SurProjectVideoPassage)
+ {
+ return success(surProjectVideoConfigService.editPassageState(SurProjectVideoPassage));
+ }
+
+ /**
+ * 获取视频配置详细信息
+ */
+ @PreAuthorize("@ss.hasPermi('video:videoConfig:query')")
+ @GetMapping(value = "/getVideoPassage/{videoDvrNumberd}")
+ public AjaxResult getVideoPassage(@PathVariable("videoDvrNumberd") String videoDvrNumberd)
+ {
+ return success(surProjectVideoConfigService.getVideoPassage(videoDvrNumberd));
+ }
}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectVideoConfig.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/domain/SurProjectVideoConfig.java
similarity index 89%
rename from yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectVideoConfig.java
rename to yanzhu-jh/src/main/java/com/yanzhu/jh/video/domain/SurProjectVideoConfig.java
index 72136b3a..ccf48c30 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectVideoConfig.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/domain/SurProjectVideoConfig.java
@@ -1,10 +1,11 @@
-package com.yanzhu.jh.project.domain;
+package com.yanzhu.jh.video.domain;
-import java.util.List;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.List;
/**
* 视频配置对象 sur_project_video_config
@@ -43,6 +44,14 @@ public class SurProjectVideoConfig extends BaseEntity
@Excel(name = "通道数量")
private int videoPassageCount;
+ /** 通道连通数量 */
+ @Excel(name = "通道连通数量")
+ private int passagePassCount;
+
+ /** 设备排序 */
+ @Excel(name = "设备排序")
+ private int videoSort;
+
/** 通信类型 */
@Excel(name = "通信类型")
private String signalType;
@@ -182,6 +191,22 @@ public class SurProjectVideoConfig extends BaseEntity
this.videoName = videoName;
}
+ public int getPassagePassCount() {
+ return passagePassCount;
+ }
+
+ public void setPassagePassCount(int passagePassCount) {
+ this.passagePassCount = passagePassCount;
+ }
+
+ public int getVideoSort() {
+ return videoSort;
+ }
+
+ public void setVideoSort(int videoSort) {
+ this.videoSort = videoSort;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectVideoPassage.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/domain/SurProjectVideoPassage.java
similarity index 86%
rename from yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectVideoPassage.java
rename to yanzhu-jh/src/main/java/com/yanzhu/jh/video/domain/SurProjectVideoPassage.java
index ca1f79c3..11c7c8a0 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/domain/SurProjectVideoPassage.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/domain/SurProjectVideoPassage.java
@@ -1,9 +1,9 @@
-package com.yanzhu.jh.project.domain;
+package com.yanzhu.jh.video.domain;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
/**
* 视频通道对象 sur_project_video_passage
@@ -34,6 +34,10 @@ public class SurProjectVideoPassage extends BaseEntity
@Excel(name = "视频通道")
private Long passageValue;
+ /** 视频通道状态 */
+ @Excel(name = "视频通道状态")
+ private String passageState;
+
public void setId(Long id)
{
this.id = id;
@@ -80,6 +84,14 @@ public class SurProjectVideoPassage extends BaseEntity
return passageValue;
}
+ public String getPassageState() {
+ return passageState;
+ }
+
+ public void setPassageState(String passageState) {
+ this.passageState = passageState;
+ }
+
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectVideoConfigMapper.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/mapper/SurProjectVideoConfigMapper.java
similarity index 77%
rename from yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectVideoConfigMapper.java
rename to yanzhu-jh/src/main/java/com/yanzhu/jh/video/mapper/SurProjectVideoConfigMapper.java
index f458ef7a..7608eb8d 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/mapper/SurProjectVideoConfigMapper.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/mapper/SurProjectVideoConfigMapper.java
@@ -1,8 +1,9 @@
-package com.yanzhu.jh.project.mapper;
+package com.yanzhu.jh.video.mapper;
+
+import com.yanzhu.jh.video.domain.SurProjectVideoConfig;
+import com.yanzhu.jh.video.domain.SurProjectVideoPassage;
import java.util.List;
-import com.yanzhu.jh.project.domain.SurProjectVideoConfig;
-import com.yanzhu.jh.project.domain.SurProjectVideoPassage;
/**
* 视频配置Mapper接口
@@ -20,6 +21,14 @@ public interface SurProjectVideoConfigMapper
*/
public SurProjectVideoConfig selectSurProjectVideoConfigById(Long id);
+ /**
+ * 查询视频配置
+ *
+ * @param videoDvrNumber 设备编号
+ * @return 视频配置
+ */
+ public SurProjectVideoConfig selectSurProjectVideoConfigByDvrNumber(String videoDvrNumber);
+
/**
* 查询视频配置列表
*
@@ -84,4 +93,12 @@ public interface SurProjectVideoConfigMapper
* @return 结果
*/
public int deleteSurProjectVideoPassageByVideoId(Long id);
+
+ /**
+ * 修改视频通道状态
+ *
+ * @param surProjectVideoPassage 视频通道
+ * @return 结果
+ */
+ public int updateProjectVideoPassageState(SurProjectVideoPassage surProjectVideoPassage);
}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectVideoConfigService.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/service/ISurProjectVideoConfigService.java
similarity index 64%
rename from yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectVideoConfigService.java
rename to yanzhu-jh/src/main/java/com/yanzhu/jh/video/service/ISurProjectVideoConfigService.java
index c4d1c51b..bb580f32 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/ISurProjectVideoConfigService.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/service/ISurProjectVideoConfigService.java
@@ -1,7 +1,9 @@
-package com.yanzhu.jh.project.service;
+package com.yanzhu.jh.video.service;
+
+import com.yanzhu.jh.video.domain.SurProjectVideoConfig;
+import com.yanzhu.jh.video.domain.SurProjectVideoPassage;
import java.util.List;
-import com.yanzhu.jh.project.domain.SurProjectVideoConfig;
/**
* 视频配置Service接口
@@ -43,6 +45,15 @@ public interface ISurProjectVideoConfigService
*/
public int updateSurProjectVideoConfig(SurProjectVideoConfig surProjectVideoConfig);
+
+ /**
+ * 修改视频配置
+ *
+ * @param surProjectVideoConfig 视频配置
+ * @return 结果
+ */
+ public int updateVideoConfig(SurProjectVideoConfig surProjectVideoConfig);
+
/**
* 批量删除视频配置
*
@@ -58,4 +69,20 @@ public interface ISurProjectVideoConfigService
* @return 结果
*/
public int deleteSurProjectVideoConfigById(Long id);
+
+ /**
+ * 修改视频通道状态
+ *
+ * @param SurProjectVideoPassage 视频通道
+ * @return 结果
+ */
+ public int editPassageState(SurProjectVideoPassage SurProjectVideoPassage);
+
+ /**
+ * 获取设备通道
+ *
+ * @param videoDvrNumberd 设备编号
+ * @return 结果
+ */
+ public List getVideoPassage(String videoDvrNumberd);
}
diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectVideoConfigServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/service/impl/SurProjectVideoConfigServiceImpl.java
similarity index 64%
rename from yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectVideoConfigServiceImpl.java
rename to yanzhu-jh/src/main/java/com/yanzhu/jh/video/service/impl/SurProjectVideoConfigServiceImpl.java
index 883207c5..e4b0e446 100644
--- a/yanzhu-jh/src/main/java/com/yanzhu/jh/project/service/impl/SurProjectVideoConfigServiceImpl.java
+++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/video/service/impl/SurProjectVideoConfigServiceImpl.java
@@ -1,19 +1,20 @@
-package com.yanzhu.jh.project.service.impl;
-
-import java.util.List;
+package com.yanzhu.jh.video.service.impl;
import com.ruoyi.common.enums.PublicStateEnum;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.yanzhu.jh.video.domain.SurProjectVideoConfig;
+import com.yanzhu.jh.video.domain.SurProjectVideoPassage;
+import com.yanzhu.jh.video.mapper.SurProjectVideoConfigMapper;
+import com.yanzhu.jh.video.service.ISurProjectVideoConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
-import com.yanzhu.jh.project.domain.SurProjectVideoPassage;
-import com.yanzhu.jh.project.mapper.SurProjectVideoConfigMapper;
-import com.yanzhu.jh.project.domain.SurProjectVideoConfig;
-import com.yanzhu.jh.project.service.ISurProjectVideoConfigService;
-import com.ruoyi.common.utils.SecurityUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
/**
* 视频配置Service业务层处理
*
@@ -21,7 +22,7 @@ import com.ruoyi.common.utils.SecurityUtils;
* @date 2023-08-25
*/
@Service
-public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigService
+public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigService
{
@Autowired
private SurProjectVideoConfigMapper surProjectVideoConfigMapper;
@@ -60,8 +61,11 @@ public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigS
@Override
public int insertSurProjectVideoConfig(SurProjectVideoConfig surProjectVideoConfig)
{
+
surProjectVideoConfig.setVideoPassageCount(surProjectVideoConfig.getSurProjectVideoPassageList().size());
surProjectVideoConfig.setIsDel(PublicStateEnum.OK.getCode());
+ //新增的视频为离线
+ surProjectVideoConfig.setSignalState(PublicStateEnum.VIDEO_UNKNOWN.getCode());
surProjectVideoConfig.setCreateBy(SecurityUtils.getUsername());
surProjectVideoConfig.setCreateTime(DateUtils.getNowDate());
int rows = surProjectVideoConfigMapper.insertSurProjectVideoConfig(surProjectVideoConfig);
@@ -79,7 +83,9 @@ public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigS
@Override
public int updateSurProjectVideoConfig(SurProjectVideoConfig surProjectVideoConfig)
{
-
+ if(surProjectVideoConfig.getProjectId()==null){
+ surProjectVideoConfig.setProjectId(0L);
+ }
surProjectVideoConfig.setVideoPassageCount(surProjectVideoConfig.getSurProjectVideoPassageList().size());
surProjectVideoConfig.setUpdateBy(SecurityUtils.getUsername());
surProjectVideoConfig.setUpdateTime(DateUtils.getNowDate());
@@ -88,6 +94,18 @@ public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigS
return surProjectVideoConfigMapper.updateSurProjectVideoConfig(surProjectVideoConfig);
}
+ /**
+ * 修改视频配置
+ *
+ * @param surProjectVideoConfig 视频配置
+ * @return 结果
+ */
+ @Transactional
+ @Override
+ public int updateVideoConfig(SurProjectVideoConfig surProjectVideoConfig){
+ return surProjectVideoConfigMapper.updateSurProjectVideoConfig(surProjectVideoConfig);
+ }
+
/**
* 批量删除视频配置
*
@@ -116,6 +134,44 @@ public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigS
return surProjectVideoConfigMapper.deleteSurProjectVideoConfigById(id);
}
+ /**
+ * 修改视频通道状态
+ *
+ * @param SurProjectVideoPassage 视频通道
+ * @return 结果
+ */
+ @Override
+ @Transactional
+ public int editPassageState(SurProjectVideoPassage SurProjectVideoPassage) {
+ surProjectVideoConfigMapper.updateProjectVideoPassageState(SurProjectVideoPassage);
+ SurProjectVideoConfig surProjectVideoConfig = surProjectVideoConfigMapper.selectSurProjectVideoConfigByDvrNumber(SurProjectVideoPassage.getVideoDvrNumber());
+ int res = 0;
+ for(SurProjectVideoPassage passage:surProjectVideoConfig.getSurProjectVideoPassageList()){
+ if(passage.getPassageState().equals(PublicStateEnum.VIDEO_ONLINE.getCode())){
+ res++;
+ }
+ }
+ surProjectVideoConfig.setPassagePassCount(res);
+ //判断设备是否在线,一个通道在线则显示设备在线
+ if(res>0){
+ surProjectVideoConfig.setSignalState(PublicStateEnum.VIDEO_ONLINE.getCode());
+ }else{
+ surProjectVideoConfig.setSignalState(PublicStateEnum.VIDEO_OFFLINE.getCode());
+ }
+ surProjectVideoConfigMapper.updateSurProjectVideoConfig(surProjectVideoConfig);
+ return 1;
+ }
+
+ /**
+ * 获取设备通道
+ *
+ * @param videoDvrNumberd 设备编号
+ * @return 结果
+ */
+ public List getVideoPassage(String videoDvrNumberd) {
+ return surProjectVideoConfigMapper.selectSurProjectVideoConfigByDvrNumber(videoDvrNumberd).getSurProjectVideoPassageList();
+ }
+
/**
* 新增视频通道信息
*
@@ -132,6 +188,7 @@ public class SurProjectVideoConfigServiceImpl implements ISurProjectVideoConfigS
{
surProjectVideoPassage.setVideoId(id);
surProjectVideoPassage.setVideoDvrNumber(surProjectVideoConfig.getVideoDvrNumber());
+ surProjectVideoPassage.setPassageState(PublicStateEnum.VIDEO_UNKNOWN.getCode());
list.add(surProjectVideoPassage);
}
if (list.size() > 0)
diff --git a/yanzhu-jh/src/main/resources/mapper/project/SurProjectVideoConfigMapper.xml b/yanzhu-jh/src/main/resources/mapper/video/SurProjectVideoConfigMapper.xml
similarity index 78%
rename from yanzhu-jh/src/main/resources/mapper/project/SurProjectVideoConfigMapper.xml
rename to yanzhu-jh/src/main/resources/mapper/video/SurProjectVideoConfigMapper.xml
index d36c35c2..4568542c 100644
--- a/yanzhu-jh/src/main/resources/mapper/project/SurProjectVideoConfigMapper.xml
+++ b/yanzhu-jh/src/main/resources/mapper/video/SurProjectVideoConfigMapper.xml
@@ -2,7 +2,7 @@
-
+
@@ -13,6 +13,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
@@ -37,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- select spvc.id, spvc.project_id, spvc.video_name, spvc.video_only_type, spvc.video_dvr_number, spvc.video_dvr_security, spvc.video_passage_count, spvc.signal_type, spvc.signal_state, spvc.signal_code, spvc.is_del, spvc.create_by, spvc.create_time, spvc.update_by, spvc.update_time, spvc.remark, sp.projectName from sur_project_video_config spvc
+ select spvc.id, spvc.project_id, spvc.video_name, spvc.video_only_type, spvc.video_dvr_number, spvc.video_dvr_security, spvc.video_passage_count, spvc.passage_pass_count, spvc.video_sort, spvc.signal_type, spvc.signal_state, spvc.signal_code, spvc.is_del, spvc.create_by, spvc.create_time, spvc.update_by, spvc.update_time, spvc.remark, sp.projectName from sur_project_video_config spvc
left join sur_project sp on sp.id=spvc.project_id
@@ -63,16 +65,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and sp.id in (select DISTINCT spui.projectId from sur_project_unit_info spui where spui.unitId = #{nowDept})
and sp.id in (select DISTINCT spu.project_id from sur_project_userinfo spu where spu.user_id = #{nowUser} and spu.is_del=0)
+ order by spvc.video_sort asc, spvc.video_name
+
+
insert into sur_project_video_config
@@ -83,6 +95,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
video_dvr_number,
video_dvr_security,
video_passage_count,
+ passage_pass_count,
+ video_sort,
signal_type,
signal_state,
signal_code,
@@ -100,6 +114,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{videoDvrNumber},
#{videoDvrSecurity},
#{videoPassageCount},
+ #{passagePassCount},
+ #{videoSort},
#{signalType},
#{signalState},
#{signalCode},
@@ -115,12 +131,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update sur_project_video_config
- project_id = #{projectId},
+ project_id = #{projectId},
+ project_id = NULL,
video_name = #{videoName},
video_only_type = #{videoOnlyType},
video_dvr_number = #{videoDvrNumber},
video_dvr_security = #{videoDvrSecurity},
video_passage_count = #{videoPassageCount},
+ passage_pass_count = #{passagePassCount},
+ video_sort = #{videoSort},
signal_type = #{signalType},
signal_state = #{signalState},
signal_code = #{signalCode},
@@ -134,16 +153,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
-
- delete from sur_project_video_config where id = #{id}
-
+
+ update sur_project_video_config set is_del=1 where id = #{id}
+
-
- delete from sur_project_video_config where id in
+
+ update sur_project_video_config set is_del=1 where id in
#{id}
-
+
delete from sur_project_video_passage where video_id in
@@ -162,4 +181,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
( #{item.id}, #{item.videoId}, #{item.videoDvrNumber}, #{item.passageName}, #{item.passageValue})
+
+
+ update sur_project_video_passage set passage_state=#{passageState} where id = #{id}
+
+
\ No newline at end of file