@@ -22,6 +49,7 @@ import { AppMain, Navbar, Settings, Sidebar, TagsView } from './components'
import ResizeMixin from './mixin/ResizeHandler'
import { mapState } from 'vuex'
import variables from '@/assets/styles/variables.scss'
+import { getList as getStationList } from '@/api/basedata/station'
export default {
name: 'Layout',
@@ -33,6 +61,16 @@ export default {
Sidebar,
TagsView
},
+ data() {
+ return {
+ stationOptions: [],
+ selectedStation: '',
+ moduleLinks: [
+ { key: 'home', label: '动环巡检', path: '/index' },
+ { key: 'video', label: '视频监控', path: '/video-preview/index' }
+ ]
+ }
+ },
mixins: [ResizeMixin],
computed: {
...mapState({
@@ -55,11 +93,43 @@ export default {
isPatrolWorkspace() {
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 ''
+ },
variables() {
return variables;
}
},
+ mounted() {
+ this.loadStations()
+ },
methods: {
+ async loadStations() {
+ try {
+ const result = await getStationList({ pageNum: 1, pageSize: 1000 })
+ const rows = Array.isArray(result && result.rows)
+ ? result.rows
+ : (Array.isArray(result && result.data) ? result.data : [])
+ this.stationOptions = rows.map((item, index) => {
+ const value = item.stationCode || item.stationId || item.id || item.code
+ const label = index === 0 ? '白杨坪升压站' : (item.stationName || item.name || String(value || ''))
+ return { value: value == null ? '' : String(value), label }
+ }).filter(item => item.value && item.label)
+ } catch (error) {
+ this.stationOptions = []
+ }
+ this.selectedStation = this.$route.query.stationCode || (this.stationOptions[0] && this.stationOptions[0].value) || ''
+ },
+ handleStationChange(value) {
+ this.$router.replace({ query: { ...this.$route.query, stationCode: value } }).catch(() => undefined)
+ },
+ goModule(path) {
+ if (this.$route.path !== path) this.$router.push({ path }).catch(() => undefined)
+ },
handleClickOutside() {
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
}
@@ -104,6 +174,124 @@ export default {
}
}
+ .module-subbar {
+ position: relative;
+ width: 100%;
+ height: 40px;
+ padding: 2px 18px;
+ box-sizing: border-box;
+ background: linear-gradient(180deg, #151b5b 0%, #111753 58%, #0e1244 100%);
+ // Keep the lower edge soft while replacing the former hard top line with a fade.
+ box-shadow: inset 0 -1px 0 rgba(0, 13, 63, .55);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ .module-subbar::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 6px;
+ pointer-events: none;
+ background: linear-gradient(180deg, rgba(1, 8, 27, .62) 0%, rgba(5, 18, 52, .28) 48%, rgba(5, 18, 52, 0) 100%);
+ }
+
+ .module-links {
+ height: 36px;
+ margin-left:120px;
+ display: flex;
+ align-items: stretch;
+ }
+
+ .module-link {
+ position: relative;
+ min-width: 90px;
+ height: 36px;
+ padding: 0 24px;
+ border: 0;
+ border-right: 0;
+ color: #c9dcf8;
+ background: transparent;
+ font: inherit;
+ font-size: 14px;
+ font-weight: 900;
+ letter-spacing: 1px;
+ font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
+ line-height: 36px;
+ text-align: center;
+ cursor: pointer;
+ transition: color .2s, background-color .2s;
+ }
+
+ .module-link:not(:last-child)::before {
+ content: "";
+ position: absolute;
+ top: 11%;
+ right: 0;
+ width: 1px;
+ height: 78%;
+ background: linear-gradient(180deg, rgba(90, 133, 197, 0) 0%, rgba(90, 133, 197, .42) 50%, rgba(90, 133, 197, 0) 100%);
+ pointer-events: none;
+ }
+
+ .module-link:hover {
+ color: #54ffff;
+ background: transparent;
+ }
+
+ .module-link.active {
+ position: relative;
+ color: #3FFFFE;
+ font-size: 14px;
+ letter-spacing: 1px;
+ font-weight: 900;
+ background: transparent;
+ box-shadow: none;
+ }
+
+ .module-link.active::after {
+ content: '';
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: -2px;
+ height: 24px;
+ transform: scaleX(-1) scaleY(-1);
+ background-image: radial-gradient(circle at 50% 0%, #00CBDA 0%, rgba(23, 88, 93, 0) 47%, rgba(23, 47, 93, 0) 61%);
+ background-size: 100% 100%;
+ pointer-events: none;
+ }
+
+ .station-select {
+ width: 176px;
+ }
+
+ .station-select ::v-deep .el-input__inner {
+ height: 26px;
+ padding: 0 30px 0 12px;
+ color: #dcecff;
+ font-size: 14px;
+ letter-spacing: 1px;
+ font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
+ line-height: 24px;
+ background: rgba(9, 31, 89, .82);
+ border: 1px solid #6b9deb;
+ border-radius: 2px;
+ }
+
+ .station-select ::v-deep .el-input__suffix {
+ color: #b5d9ff;
+ }
+
+ ::v-deep .station-select-popper .el-select-dropdown__item {
+ font-size: 14px;
+ letter-spacing: 1px;
+ font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
+ }
+
.fixed-header {
position: fixed;
top: 0;
@@ -126,6 +314,10 @@ export default {
}
+ .hideSidebar .module-links {
+ margin-left: 54px;
+ }
+
.hideSidebar .fixed-header {
margin-left: 0;
width: 100%;
@@ -143,6 +335,11 @@ export default {
}
+ .sidebarHide .module-links,
+ .mobile .module-links {
+ margin-left: 12px;
+ }
+
.app-wrapper.patrolWorkspace {
::v-deep .sidebar-container {
top: 0 !important;
diff --git a/src/router/index.js b/src/router/index.js
index 07b8ea1..1ff9269 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -149,7 +149,7 @@ export const constantRoutes = [
path: 'index',
component: () => import('@/views/cards/taskSummary/inspectionTask'),
name: 'Index',
- meta: { title: '巡视任务', icon: 'dashboard', affix: true, activeMenu: '/task-summary/inspectionTask' }
+ meta: { title: '动环巡检', icon: 'dashboard', affix: true, activeMenu: '/task-summary/inspectionTask' }
}
]
},
diff --git a/src/views/cards/patrolReport/InspectionReporter.vue b/src/views/cards/patrolReport/InspectionReporter.vue
index ddf4850..802f18a 100644
--- a/src/views/cards/patrolReport/InspectionReporter.vue
+++ b/src/views/cards/patrolReport/InspectionReporter.vue
@@ -60,7 +60,7 @@
class="card-table"
v-loading="loading"
:data="dataList"
- :height="tableHeight"
+ :max-height="tableHeight"
border
stripe
>
@@ -75,18 +75,20 @@
label="巡视任务"
align="left"
prop="inspectionTaskName"
- width="700"
+ width="620"
header-align="center"
/>
@@ -102,7 +104,7 @@
导出
diff --git a/src/views/cards/patrolReport/patrolReportDetail.vue b/src/views/cards/patrolReport/patrolReportDetail.vue
index 80148b3..8d0339b 100644
--- a/src/views/cards/patrolReport/patrolReportDetail.vue
+++ b/src/views/cards/patrolReport/patrolReportDetail.vue
@@ -191,7 +191,7 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
:destroy-on-close="true"
- custom-class="card-dialog card-page"
+ custom-class="card-dialog card-page patrol-report-image-preview-dialog"
width="70%"
append-to-body
>
@@ -700,3 +700,30 @@ export default {
display: none;
}
+
+
diff --git a/src/views/cards/site_management/site_management.vue b/src/views/cards/site_management/site_management.vue
index e1b37dc..ed2262f 100644
--- a/src/views/cards/site_management/site_management.vue
+++ b/src/views/cards/site_management/site_management.vue
@@ -901,6 +901,9 @@
@@ -914,6 +917,9 @@
@@ -3328,6 +3334,24 @@ export default {
// 保存点位数据
saveDot1() {
+ const invalidPhotoCount = this.presetData.presetActionList.some(
+ (item) =>
+ item.photoCount !== null &&
+ item.photoCount !== undefined &&
+ String(item.photoCount).trim() !== "" &&
+ !/^\d+$/.test(String(item.photoCount).trim())
+ );
+ const invalidPhotoInterval = this.presetData.presetActionList.some(
+ (item) =>
+ item.photoSeper !== null &&
+ item.photoSeper !== undefined &&
+ String(item.photoSeper).trim() !== "" &&
+ !/^\d+$/.test(String(item.photoSeper).trim())
+ );
+ if (invalidPhotoCount || invalidPhotoInterval) {
+ this.$message.error("\u62cd\u7167\u6b21\u6570\u548c\u62cd\u7167\u95f4\u9694\u53ea\u80fd\u8f93\u5165\u975e\u8d1f\u6574\u6570");
+ return;
+ }
// 确保 presetPosName 有值
if (!this.presetData.presetPosName) {
this.presetData.presetPosName = this.presetName || this.presetData.presetPosName || '';
@@ -3780,11 +3804,11 @@ export default {
width: 8px;
bottom: 10px;
height: auto;
- background-color: #102b50;
+ background-color: transparent;
// border-right: 1px solid #3988ff;
border-left: 1px solid rgba(57, 136, 255, 0.45);
cursor: col-resize;
- display: none;
+ display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
@@ -3793,7 +3817,7 @@ export default {
z-index: 10;
&:hover {
- background-color: #2a3a4a;
+ background-color: transparent;
.handle-line {
background-color: #1890ff;
@@ -3805,7 +3829,7 @@ export default {
}
&.resizing {
- background-color: #2a3a4a;
+ background-color: transparent;
.handle-line {
background-color: #40a9ff;
@@ -3916,7 +3940,7 @@ export default {
/* 添加重置按钮样式 */
.reset-width-btn {
- display: none;
+ display: flex;
position: absolute;
bottom: 10px;
right: 10px;
diff --git a/src/views/login.vue b/src/views/login.vue
index 8a93593..5ed6e2a 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -1,7 +1,7 @@
- 若依后台管理系统
+ 消防动环管理系统
-
@@ -181,9 +178,12 @@ export default {
background-size: cover;
}
.title {
- margin: 0px auto 30px auto;
+ margin: 0px auto 26px auto;
text-align: center;
color: #707070;
+ font-family: var(--app-heading-font-family);
+ font-size: 32px;
+ font-weight: 900;
}
.login-form {
diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue
index ce49e18..153cf5e 100644
--- a/src/views/monitor/job/index.vue
+++ b/src/views/monitor/job/index.vue
@@ -277,7 +277,7 @@
Bean {{ $t("job.CallExample") }}:ryTask.ryParams('ry')
Class{{
$t("job.CallExample")
- }}:com.ruoyi.quartz.task.RyTask.ryParams('ry')
{{
+ }}:com.example.quartz.task.RyTask.ryParams('ry')
{{
$t("job.ParameterDescription")
}}
diff --git a/src/views/point copy/components/site_VideoDialog.vue b/src/views/point copy/components/site_VideoDialog.vue
index 966ef3c..fa063c6 100644
--- a/src/views/point copy/components/site_VideoDialog.vue
+++ b/src/views/point copy/components/site_VideoDialog.vue
@@ -153,6 +153,9 @@