diff --git a/src/assets/images/ptz-control.png b/src/assets/images/ptz-control.png new file mode 100644 index 0000000..1b04af6 Binary files /dev/null and b/src/assets/images/ptz-control.png differ diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index 8a7807d..fb1eaea 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -78,7 +78,7 @@ export default { const videoPaths = ['/video-preview', '/video-playback'] if (videoPaths.some(item => path === item || path.startsWith(`${item}/`))) { - return { title: '视频监控', path: '/inspection-workspace/video-preview' } + return { title: '动环巡检', path: '/inspection-workspace/task' } } return null diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue index 510cc13..30e71f6 100644 --- a/src/layout/components/Sidebar/Item.vue +++ b/src/layout/components/Sidebar/Item.vue @@ -18,7 +18,7 @@ const navIconMap = { '巡视报告': require('@/assets/images/nav/nav-patrol-report.png'), '巡视计划': require('@/assets/images/nav/nav-patrol-schedule.png'), '缺陷记录': require('@/assets/images/nav/nav-defect.png'), - '视频预览': require('@/assets/images/nav/nav-video-preview.png'), + '实时监控': require('@/assets/images/nav/nav-video-preview.png'), '历史回放': require('@/assets/images/nav/nav-video-playback.png'), '遥视任务管理': require('@/assets/images/nav/nav-task-management.png'), '巡检任务管理': require('@/assets/images/nav/nav-task-management.png'), diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index eb8fe76..e5e8a10 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -74,26 +74,18 @@ export default { const groupedPaths = new Set([...inspectionPaths, ...videoPaths]); const otherRoutes = visibleRoutes.filter(route => !groupedPaths.has(route.path)); const groups = []; - if (inspectionRoutes.length) groups.push({ + const patrolRoutes = [...inspectionRoutes, ...videoRoutes]; + if (patrolRoutes.length) groups.push({ path: "/inspection-menu", meta: { title: "动环巡检", icon: "dashboard" }, alwaysShow: true, - children: inspectionRoutes, - }); - if (videoRoutes.length) groups.push({ - path: "/video-menu", - meta: { title: "视频监控", icon: "monitor" }, - alwaysShow: true, - children: videoRoutes, + children: patrolRoutes, }); const routePath = this.$route.path; - if (routePath === "/index" || routePath === "/" || routePath === "/xfdh/index" || inspectionRoutes.some(route => routePath.indexOf(route.path + "/") === 0 || routePath === route.path)) { - return groups.filter(group => group.path === "/inspection-menu"); - } - if (routePath.indexOf("/video-preview") === 0 || routePath.indexOf("/video-playback") === 0) { - return groups.filter(group => group.path === "/video-menu"); + if (routePath === "/index" || routePath === "/" || routePath === "/xfdh/index" || patrolRoutes.some(route => routePath.indexOf(route.path + "/") === 0 || routePath === route.path)) { + return patrolRoutes; } - return [...groups, ...otherRoutes]; + return [...patrolRoutes, ...otherRoutes]; } const workspacePaths = { "/task-summary": "/inspection-workspace/task", @@ -139,7 +131,7 @@ export default { defaultOpeneds() { if (this.isCollapse) return []; const paths = (this.displayedRoutes || []).map(route => route.path); - return paths.filter(path => path === "/inspection-menu" || path === "/video-menu"); + return paths.filter(path => path === "/inspection-menu"); }, variables() { return variables; diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index 786917d..591aa2d 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -24,6 +24,17 @@ + + +
- + @@ -66,8 +67,7 @@ export default { stationOptions: [], selectedStation: '', moduleLinks: [ - { key: 'home', label: '动环巡检', path: '/index' }, - { key: 'video', label: '视频监控', path: '/video-preview/index' } + { key: 'home', label: '动环巡检', path: '/index' } ] } }, @@ -94,11 +94,7 @@ export default { return this.$route.matched.some(route => route.meta && route.meta.patrolWorkspace) }, activeModule() { - const path = this.$route.path - const inspectionPaths = ['/task-summary', '/patrol-plan', '/site-management', '/patrol-report', '/patrol-schedule', '/defect-record', '/inspection-workspace/task', '/inspection-workspace/plan', '/inspection-workspace/points', '/inspection-workspace/report', '/inspection-workspace/schedule', '/inspection-workspace/defects'] - if (path === '/' || path === '/index' || path === '/xfdh/index' || inspectionPaths.some(item => path === item || path.indexOf(item + '/') === 0)) return 'home' - if (path.indexOf('/video-preview') === 0 || path.indexOf('/video-playback') === 0 || path.indexOf('/inspection-workspace/video-preview') === 0 || path.indexOf('/inspection-workspace/video-playback') === 0) return 'video' - return '' + return 'home' }, variables() { return variables; diff --git a/src/router/index.js b/src/router/index.js index 1ff9269..071ebe0 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -129,7 +129,7 @@ export const constantRoutes = [ path: 'video-preview', component: () => import('@/views/video/LivePreview'), name: 'InspectionWorkspaceVideoPreview', - meta: { title: '视频预览', activeMenu: '/inspection-workspace/video-preview', patrolWorkspace: true } + meta: { title: '实时监控', activeMenu: '/inspection-workspace/video-preview', patrolWorkspace: true } }, { path: 'video-playback', @@ -265,13 +265,13 @@ export const constantRoutes = [ path: '/video-preview', component: Layout, redirect: '/video-preview/index', - meta: { title: '视频预览' }, + meta: { title: '实时监控' }, children: [ { path: 'index', component: () => import('@/views/video/LivePreview'), name: 'VideoLivePreview', - meta: { title: '视频预览', activeMenu: '/video-preview/index' } + meta: { title: '实时监控', activeMenu: '/video-preview/index' } } ] }, diff --git a/src/views/cards/components/ImagePreview/index.vue b/src/views/cards/components/ImagePreview/index.vue index 0cbd3e8..c39f2a4 100644 --- a/src/views/cards/components/ImagePreview/index.vue +++ b/src/views/cards/components/ImagePreview/index.vue @@ -10,7 +10,11 @@ style="width: 100%; height: 100%" fit="contain" :src="selectImgUrl" + error-tips="图片加载失败" + @imgloaderror="imageError = true" + @imgload="imageError = false" > +
图片加载失败
↺ diff --git a/src/views/cards/components/ImagePreviewZoomTemperature/index.vue b/src/views/cards/components/ImagePreviewZoomTemperature/index.vue index fa00bfe..02f4f3f 100644 --- a/src/views/cards/components/ImagePreviewZoomTemperature/index.vue +++ b/src/views/cards/components/ImagePreviewZoomTemperature/index.vue @@ -42,7 +42,7 @@
- +
diff --git a/src/views/cards/patrolPlan/notstart.vue b/src/views/cards/patrolPlan/notstart.vue index 7abd50e..6cbb82d 100644 --- a/src/views/cards/patrolPlan/notstart.vue +++ b/src/views/cards/patrolPlan/notstart.vue @@ -392,7 +392,7 @@ export default { } else if (row.executionStatus == 1) { return "周期执行"; } else if (row.executionStatus == 2) { - return "定时执行"; + return "单次执行"; } else if (row.executionStatus == 3) { return "已执行"; } else if (row.executionStatus == 4) { @@ -667,10 +667,11 @@ export default { } ::v-deep .patrol-plan-dialog .el-dialog__body { - height: auto !important; + height: calc(100vh - 160px) !important; max-height: calc(100vh - 160px); + box-sizing: border-box; padding: 0 24px 24px !important; - overflow-y: auto !important; + overflow: hidden !important; } .table1 { diff --git a/src/views/cards/patrolPlan/summary_editTask.vue b/src/views/cards/patrolPlan/summary_editTask.vue index 20ed71e..4b40bfb 100644 --- a/src/views/cards/patrolPlan/summary_editTask.vue +++ b/src/views/cards/patrolPlan/summary_editTask.vue @@ -47,24 +47,6 @@ - -
-
设备类型 *
-
- - {{ item.dictLabel }} - -
-
-
执行策略 *
@@ -72,13 +54,13 @@ v-model="formData.executionType" class="form-input el-radio-group" > - 定时执行 + 单次执行 周期执行 间隔执行
- + - -
-
是否开启 *
- - - - -
@@ -996,11 +967,6 @@ export default { this.$modal.msgError("请选择点位类型"); return false; } - if (this.formData.deviceTypeList.length === 0) { - this.$modal.msgError("请选择设备类型"); - return false; - } - if (this.formData.executionType == "1") { if (!this.formData.fixedStartTime) { this.$modal.msgError("请选择执行时间"); @@ -1191,23 +1157,27 @@ export default { width: 90%; margin: 0 auto; padding: 20px 0; - height: calc(100vh - 203px); - overflow: auto; + height: 100%; + box-sizing: border-box; + overflow: hidden; } .ac-on1 { width: 100%; + height: 100%; display: flex; gap: 40px; - min-height: 600px; + min-height: 0; .ac-on1-box { flex: 1; &:first-child { max-width: 600px; + min-height: 0; display: flex; flex-direction: column; + overflow: hidden; } } } @@ -1275,6 +1245,12 @@ export default { color: #fff; padding-left: 8px; } + + .el-checkbox__input.is-checked .el-checkbox__inner, + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #2f7cff; + border-color: #2f7cff; + } } } } @@ -1298,15 +1274,41 @@ export default { width: 100%; } +.cycle-time-row { + margin-bottom: 8px; +} + .time-table-wrapper { margin-left: 142px; margin-bottom: 20px; + flex: 1 1 320px; + min-height: 120px; + max-height: 320px; + overflow-y: auto; + padding-right: 8px; + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #40486a; + border-radius: 3px; + } + + &::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.2); + border-radius: 3px; + } } .time-header { display: flex; - margin-bottom: 12px; - padding: 8px 0; + position: sticky; + top: 0; + z-index: 1; + margin-bottom: 0; + padding: 8px 0 32px; .header-item { flex: 1; @@ -1370,9 +1372,13 @@ export default { padding: 20px; display: flex; flex-direction: column; + min-height: 0; + box-sizing: border-box; .tree-container { - height: 440px; + height: auto; + min-height: 0; + flex: 1; overflow: auto; margin-top: 10px; margin-left:65px; @@ -1402,7 +1408,7 @@ export default { } .button-group-tree { - margin-top: 15px; + margin-top: 35px; text-align: right; padding-top: 16px; diff --git a/src/views/cards/patrolPlan/summary_newTask.vue b/src/views/cards/patrolPlan/summary_newTask.vue index 66a756b..8a3ae63 100644 --- a/src/views/cards/patrolPlan/summary_newTask.vue +++ b/src/views/cards/patrolPlan/summary_newTask.vue @@ -47,35 +47,17 @@ - -
-
设备类型 *
-
- - {{ item.dictLabel }} - -
-
-
执行策略 *
- 定时执行 + 单次执行 周期执行 间隔执行
- + - -
-
是否开启 *
- - - - -
@@ -833,11 +807,6 @@ export default { this.$modal.msgError("请选择点位类型"); return false; } - if (this.deviceTypeList.length === 0) { - this.$modal.msgError("请选择设备类型"); - return false; - } - // 移除巡检区域必填验证,因为设备不是必选的 // this.selectAreaIdList = this.$refs.treeForm.getCheckedKeys(); // if (this.selectAreaIdList.length <= 0) { @@ -845,7 +814,7 @@ export default { // return false; // } - // 定时执行验证 + // 单次执行验证 if (this.radio == "1") { if (!this.value11) { this.$modal.msgError("请选择执行时间"); @@ -1035,23 +1004,27 @@ export default { width: 90%; margin: 0 auto; padding: 20px 0; - height: calc(100vh - 203px); - overflow: auto; + height: 100%; + box-sizing: border-box; + overflow: hidden; } .ac-on1 { width: 100%; + height: 100%; display: flex; gap: 40px; - min-height: 600px; + min-height: 0; .ac-on1-box { flex: 1; &:first-child { max-width: 600px; + min-height: 0; display: flex; flex-direction: column; + overflow: hidden; } } } @@ -1124,6 +1097,12 @@ export default { color: #fff; padding-left: 8px; } + + .el-checkbox__input.is-checked .el-checkbox__inner, + .el-checkbox__input.is-indeterminate .el-checkbox__inner { + background-color: #2f7cff; + border-color: #2f7cff; + } } } } @@ -1147,15 +1126,41 @@ export default { width: 100%; } +.cycle-time-row { + margin-bottom: 8px; +} + .time-table-wrapper { margin-left: 142px; margin-bottom: 20px; + flex: 1 1 320px; + min-height: 120px; + max-height: 320px; + overflow-y: auto; + padding-right: 8px; + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #40486a; + border-radius: 3px; + } + + &::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.2); + border-radius: 3px; + } } .time-header { display: flex; - margin-bottom: 12px; - padding: 8px 0; + position: sticky; + top: 0; + z-index: 1; + margin-bottom: 0; + padding: 8px 0 32px; .header-item { flex: 1; @@ -1240,9 +1245,13 @@ export default { padding: 20px; display: flex; flex-direction: column; + min-height: 0; + box-sizing: border-box; .tree-container { - height: 440px; + height: auto; + min-height: 0; + flex: 1; overflow: auto; margin-top: 10px; margin-left:65px; @@ -1273,7 +1282,7 @@ export default { } .button-group-tree { - margin-top: 15px; + margin-top: 35px; text-align: right; padding-top: 16px; @@ -1355,7 +1364,7 @@ export default { } .tree-container { - height: 400px !important; + height: 480px !important; } } diff --git a/src/views/cards/site_management/site_management.vue b/src/views/cards/site_management/site_management.vue index 91c7939..91c531c 100644 --- a/src/views/cards/site_management/site_management.vue +++ b/src/views/cards/site_management/site_management.vue @@ -64,6 +64,7 @@
@@ -175,6 +176,7 @@ @row-click="handleRowClick" highlight-current-row stripe + :fit="false" :height="tableHeight" :data="filteredTableData" tooltip-effect="dark" @@ -198,7 +200,6 @@ type="selection" align="center" width="55" - fixed="left" :selectable="checkSelectable" > @@ -208,7 +209,6 @@ align="center" label="序号" width="55" - fixed="left" >