From a662f3de770359d686b2bb39824cacb0f0754b23 Mon Sep 17 00:00:00 2001 From: douyage Date: Mon, 17 Aug 2026 19:44:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 1 - .env.htjc6 | 5 +- .env.production | 3 +- src/api/videosMonitor/index.js | 1 - src/assets/styles/ruoyi.scss | 138 ++++++++++++++++++ src/components/Breadcrumb/index.vue | 20 +-- src/layout/components/Navbar.vue | 48 +----- src/layout/components/Sidebar/index.vue | 14 +- src/router/index.js | 3 +- .../administration/administration copy.vue | 6 +- src/views/administration/administration.vue | 6 +- src/views/area/area.vue | 4 - src/views/area/area_management.vue | 4 - src/views/basedata/alg/index.vue | 4 - src/views/basedata/alg/subtype/index.vue | 4 - src/views/basedata/station/index.vue | 4 - src/views/cards/patrolPlan/notstart.vue | 71 ++++++++- src/views/cards/site_management/algorithm.vue | 2 +- .../site_management/components/chooseAlg.vue | 38 +++++ .../cards/site_management/site_management.vue | 8 + src/views/cards/tasksShow/yearDisplay.vue | 16 +- src/views/equipment/equipment.vue | 80 ++++++++-- src/views/equipment/equipment_type.vue | 4 - src/views/video/HistoryPlayback.vue | 64 ++++++-- src/views/video/LivePreview.vue | 4 +- src/views/video/components/NvrDeviceTree.vue | 3 +- 26 files changed, 408 insertions(+), 147 deletions(-) diff --git a/.env.development b/.env.development index 1143454..09664d8 100644 --- a/.env.development +++ b/.env.development @@ -8,7 +8,6 @@ ENV = 'development' VUE_APP_BASE_API = '/dev-api' VUE_APP_NVR_API = '/nvr-api' -VUE_APP_DEVICE_TREE_API = 'http://192.168.1.116:18891/app/htjc6/api' # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/.env.htjc6 b/.env.htjc6 index 265c82e..85525cc 100644 --- a/.env.htjc6 +++ b/.env.htjc6 @@ -2,9 +2,8 @@ NODE_ENV = 'production' ENV = 'production' VUE_APP_TITLE = 智能巡视 -VUE_APP_BASE_API = '/prod-api' -VUE_APP_NVR_API = 'http://192.168.1.86:28081' -VUE_APP_DEVICE_TREE_API = 'http://192.168.1.116:18891/app/htjc6/api' +VUE_APP_BASE_API = '/app/htjc6/api' +VUE_APP_NVR_API = '/nvr-api' VUE_APP_PUBLIC_PATH = '/app/htjc6/' VUE_APP_OUTPUT_DIR = 'dist/app/htjc6' diff --git a/.env.production b/.env.production index 3ee2ee3..10200d5 100644 --- a/.env.production +++ b/.env.production @@ -7,5 +7,4 @@ ENV = 'production' # 若依管理系统/生产环境 VUE_APP_BASE_API = '/prod-api' -VUE_APP_NVR_API = 'http://192.168.1.86:28081' -VUE_APP_DEVICE_TREE_API = 'http://192.168.1.116:18891/app/htjc6/api' +VUE_APP_NVR_API = '/nvr-api' diff --git a/src/api/videosMonitor/index.js b/src/api/videosMonitor/index.js index efe759c..582a713 100644 --- a/src/api/videosMonitor/index.js +++ b/src/api/videosMonitor/index.js @@ -14,7 +14,6 @@ export function getAreaEqubookTreeSelect(params) { query.patroldeviceTypeFlag || "ipc" ); return request({ - baseURL: process.env.VUE_APP_DEVICE_TREE_API, url: "/basedata/eqpbook/getAreaEqubookTreeSelectForFilter" + `?patroldeviceName=${patroldeviceName}` + diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss index 12474a5..f6f841d 100644 --- a/src/assets/styles/ruoyi.scss +++ b/src/assets/styles/ruoyi.scss @@ -698,6 +698,68 @@ background-color: rgba(8, 25, 69, 0.82) !important; } +/* Consistent single- and multi-select appearance across the application. */ +.el-select .el-input__inner { + color: #dcecff !important; + background-color: rgba(27, 42, 94, 0.94) !important; + border-color: #6f95de !important; +} + +.el-select .el-input__inner:hover, +.el-select .el-input.is-focus .el-input__inner, +.el-select .el-input__inner:focus { + border-color: #43cfff !important; +} + +.el-select-dropdown { + background-color: #0b2351 !important; + border-color: #173f89 !important; +} + +.el-select-dropdown .el-scrollbar, +.el-select-dropdown .el-scrollbar__wrap, +.el-select-dropdown .el-scrollbar__view, +.el-select-dropdown .el-select-dropdown__list { + background-color: #0b2351 !important; +} + +.el-select-dropdown .el-select-dropdown__item { + color: #dcecff !important; + background-color: transparent !important; +} + +.el-select-dropdown .el-select-dropdown__item.hover, +.el-select-dropdown .el-select-dropdown__item:hover { + color: #00ffff !important; + background-color: #002a7f !important; +} + +.el-select-dropdown .el-select-dropdown__item.selected { + color: #00ffff !important; + background-color: #002a7f !important; + font-weight: 600; +} + +.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after { + color: #00ffff !important; +} + +.el-select .el-tag { + color: #00ffff !important; + background-color: #002a7f !important; + border-color: #3988ff !important; +} + +.el-select .el-tag .el-tag__close { + color: #00ffff !important; + background-color: transparent !important; +} + +.el-select .el-tag .el-tag__close:hover { + color: #ffffff !important; + background-color: #002a7f !important; +} + .el-select-dropdown .el-scrollbar, .el-select-dropdown__wrap, .el-select-dropdown__list, @@ -730,6 +792,82 @@ border-top-color: #0f124a !important; } +/* Keep select option containers on the same blue surface as the menu. */ +.el-select-dropdown .el-scrollbar, +.el-select-dropdown .el-scrollbar__wrap, +.el-select-dropdown .el-scrollbar__view, +.el-select-dropdown .el-select-dropdown__list { + background-color: #0b2351 !important; +} + +.el-select-dropdown[x-placement^="bottom"] .popper__arrow::after { + border-bottom-color: #0b2351 !important; +} + +.el-select-dropdown[x-placement^="top"] .popper__arrow::after { + border-top-color: #0b2351 !important; +} + +/* Match vue-treeselect controls (including append-to-body menus) to el-select. */ +.vue-treeselect__control { + color: #dcecff !important; + background-color: rgba(27, 42, 94, 0.94) !important; + border-color: #6f95de !important; +} + +.vue-treeselect--open .vue-treeselect__control { + border-color: #43cfff !important; +} + +.vue-treeselect__menu { + color: #dcecff !important; + background: #0b2351 !important; + border-color: #173f89 !important; +} + +.vue-treeselect__option, +.vue-treeselect__label, +.vue-treeselect__tip-text { + color: #dcecff !important; +} + +.vue-treeselect__option--highlight, +.vue-treeselect--single .vue-treeselect__option--selected, +.vue-treeselect__option:has(.vue-treeselect__checkbox--checked) { + color: #00ffff !important; + background: #002a7f !important; +} + +.vue-treeselect__option--highlight .vue-treeselect__label, +.vue-treeselect--single .vue-treeselect__option--selected .vue-treeselect__label, +.vue-treeselect__option:has(.vue-treeselect__checkbox--checked) .vue-treeselect__label { + color: #00ffff !important; +} + +.vue-treeselect__checkbox--checked, +.vue-treeselect__checkbox--indeterminate { + background: #002a7f !important; + border-color: #00ffff !important; +} + +.vue-treeselect__multi-value-item { + color: #00ffff !important; + background: #002a7f !important; + border-color: #3988ff !important; +} + +.vue-treeselect__value-remove { + color: #00ffff !important; +} + +.vue-treeselect__placeholder { + color: rgba(220, 236, 255, 0.5) !important; +} + +.vue-treeselect__input { + color: #dcecff !important; +} + .splitpanes.default-theme .splitpanes__splitter { background-color: #0B2567 !important; border-color: #0B2567 !important; diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index e77313a..f0ceea8 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -45,11 +45,11 @@ export default { } else { matched = router.matched.filter(item => item.meta && item.meta.title) } - // 判断是否为首页 - if (!this.isPatrolWorkspace() && !this.isDashboard(matched[0])) { - matched = [{ path: "/index", meta: { title: "首页" } }].concat(matched) - } - this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) + const breadcrumb = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false) + // 单层菜单的父级和子级可能配置了相同标题,只保留一层。 + this.levelList = breadcrumb.filter((item, index) => { + return index === 0 || item.meta.title !== breadcrumb[index - 1].meta.title + }) }, findPathNum(str, char = "/") { let index = str.indexOf(char) @@ -70,13 +70,6 @@ export default { } } }, - isDashboard(route) { - const name = route && route.name - if (!name) { - return false - } - return name.trim() === 'Index' - }, handleLink(item) { const { redirect, path } = item if (redirect) { @@ -85,9 +78,6 @@ export default { } this.$router.push(path) }, - isPatrolWorkspace() { - return this.$route.matched.some(route => route.meta && route.meta.patrolWorkspace) - }, titleFn(item, children) { let str = ""; let lang = localStorage.getItem("language"); diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index da5a576..3143872 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -18,23 +18,6 @@ - - - - - - - 中文 - - - English - - - - - {{ $t('navBar.LayoutSetting') }} - - + {{ $t('navBar.LogOut') }} @@ -72,7 +52,6 @@ import TopNav from "@/components/TopNav"; import Screenfull from "@/components/Screenfull"; import headerLogo from "@/assets/images/header/logo.png"; import loginAvatar from "@/assets/images/aa-logo.png"; -// import { changeLanguage } from "@/api/login"; export default { components: { TopNav, @@ -86,25 +65,10 @@ export default { }, computed: { ...mapGetters(["avatar", "device"]), - setting: { - get() { - return this.$store.state.settings.showSettings; - }, - set(val) { - this.$store.dispatch("settings/changeSetting", { - key: "showSettings", - value: val, - }); - }, - }, topNav: { get() { return this.$store.state.settings.topNav; }, - }, - language() { - localStorage.setItem("language", this.$store.getters.language) - return this.$store.getters.language } }, methods: { @@ -120,16 +84,6 @@ export default { }); }) .catch(() => {}); - }, - handleSetLanguage(value) { - this.$i18n.locale = value - this.$store.dispatch('app/setLanguage', value) - this.$message({ message: '设置语言成功', type: 'success' }) - window.location.reload(); - return - changeLanguage(value).then(response => { - window.location.reload(); - }); } }, }; diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 220a336..3280c76 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -36,18 +36,26 @@ export default { ...mapState(["settings"]), ...mapGetters(["sidebarRouters", "sidebar"]), displayedRoutes() { - const filterHiddenNavigation = (routes = []) => routes.reduce((result, route) => { + const temporarilyHiddenRootMenus = new Set([ + "设备管理", + "系统管理", + "区域管理", + "系统监控", + "基础数据", + ]); + const filterHiddenNavigation = (routes = [], depth = 0) => routes.reduce((result, route) => { const title = String(route.meta && route.meta.title || "").split("|")[0]; const isTaskManagement = title === "巡视任务管理"; const isImplementationPoints = title === "点位管理" && route.path !== "/site-management" && route.path !== "/inspection-workspace/points"; - if (isTaskManagement || isImplementationPoints) return result; + const isTemporarilyHiddenRootMenu = depth === 0 && temporarilyHiddenRootMenus.has(title); + if (isTaskManagement || isImplementationPoints || isTemporarilyHiddenRootMenu) return result; result.push({ ...route, children: route.children - ? filterHiddenNavigation(route.children) + ? filterHiddenNavigation(route.children, depth + 1) : route.children, }); return result; diff --git a/src/router/index.js b/src/router/index.js index c10d1a5..9ad0015 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -128,12 +128,13 @@ export const constantRoutes = [ path: '', component: Layout, redirect: 'index', + hidden: true, children: [ { path: 'index', component: () => import('@/views/index'), name: 'Index', - meta: { title: '首页', icon: 'dashboard', affix: true } + meta: { title: '首页', icon: 'dashboard', affix: true, breadcrumb: false } } ] }, diff --git a/src/views/administration/administration copy.vue b/src/views/administration/administration copy.vue index 475cd07..61f8369 100644 --- a/src/views/administration/administration copy.vue +++ b/src/views/administration/administration copy.vue @@ -862,10 +862,6 @@ export default { this.loading = false; this.dataList = res.rows; this.total = res.total; - this.$message({ - message: this.$t("prompt.success.queryWasSuccessful"), - type: "success", - }); } }); }, @@ -964,7 +960,7 @@ export default { postRemove(this.ids.toString()).then((res) => { if (res.code == 200) { this.$message({ - message: this.$t("prompt.success.queryWasSuccessful"), + message: "删除成功", type: "success", }); this.init(); diff --git a/src/views/administration/administration.vue b/src/views/administration/administration.vue index 83747a9..fcd035e 100644 --- a/src/views/administration/administration.vue +++ b/src/views/administration/administration.vue @@ -517,10 +517,6 @@ export default { this.loading = false; this.dataList = res.rows; this.total = res.total; - this.$message({ - message: this.$t("prompt.success.queryWasSuccessful"), - type: "success", - }); } }); }, @@ -631,7 +627,7 @@ export default { postRemove(this.ids.toString()).then((res) => { if (res.code == 200) { this.$message({ - message: this.$t("prompt.success.queryWasSuccessful"), + message: "删除成功", type: "success", }); this.init(); diff --git a/src/views/area/area.vue b/src/views/area/area.vue index 82b0bb3..b58995d 100644 --- a/src/views/area/area.vue +++ b/src/views/area/area.vue @@ -274,10 +274,6 @@ export default { this.tableData = res.data; } - this.$message({ - type: "success", - message: "查询成功", - }); } }); }, diff --git a/src/views/area/area_management.vue b/src/views/area/area_management.vue index 8cff3e9..95e21f5 100644 --- a/src/views/area/area_management.vue +++ b/src/views/area/area_management.vue @@ -289,10 +289,6 @@ export default { if (res.code == 200) { this.tableData = res.rows; this.total = res.total; - this.$message({ - message: `查询成功`, - type: "success", - }); } }); }, diff --git a/src/views/basedata/alg/index.vue b/src/views/basedata/alg/index.vue index 7f8b574..d51e1b2 100644 --- a/src/views/basedata/alg/index.vue +++ b/src/views/basedata/alg/index.vue @@ -157,10 +157,6 @@ export default { if (res.code == 200) { this.tableData = res.rows; this.total = res.total; - this.$message({ - message: `查询成功`, - type: "success", - }); } }); }, diff --git a/src/views/basedata/alg/subtype/index.vue b/src/views/basedata/alg/subtype/index.vue index 5477947..897c212 100644 --- a/src/views/basedata/alg/subtype/index.vue +++ b/src/views/basedata/alg/subtype/index.vue @@ -266,10 +266,6 @@ export default { if (res.code == 200) { this.tableData = res.rows; this.total = res.total; - this.$message({ - message: `查询成功`, - type: "success", - }); } }); }, diff --git a/src/views/basedata/station/index.vue b/src/views/basedata/station/index.vue index 697446e..971d154 100644 --- a/src/views/basedata/station/index.vue +++ b/src/views/basedata/station/index.vue @@ -258,10 +258,6 @@ export default { if (res.code == 200) { this.tableData = res.rows; this.total = res.total; - this.$message({ - message: `查询成功`, - type: "success", - }); } }); }, diff --git a/src/views/cards/patrolPlan/notstart.vue b/src/views/cards/patrolPlan/notstart.vue index ad8340f..ff64911 100644 --- a/src/views/cards/patrolPlan/notstart.vue +++ b/src/views/cards/patrolPlan/notstart.vue @@ -98,6 +98,7 @@ border stripe :height="tableHeight" + @header-dragend="handleHeaderDragend" > - - - + + + + :resizable="true" + > + + @@ -130,7 +143,7 @@ prop="taskCycle" :formatter="stateTask" /> --> - +