Merge remote-tracking branch 'origin/dev_xd' into dev_xd

dev_xd
lj7788@126.com 2025-06-12 18:42:14 +08:00
commit a1b6d9c173
3 changed files with 294 additions and 65 deletions

View File

@ -3,55 +3,175 @@
<el-row>
<el-col :span="8" style="margin-left: 20px; width: calc(33.33% - 20px)">
<div class="head-title-tab">
<div :class="nav == 1 ? 'head-nav active' : 'head-nav'" @click="doNav(1)" v-if="1 == 2"></div>
<div :class="nav == 2 ? 'head-nav active' : 'head-nav'" @click="doNav(2)" v-if="1 == 2"></div>
<div :class="nav == 7 ? 'head-nav active' : 'head-nav'" @click="doNav(7)" v-if="1 == 2"></div>
<div
:class="nav == 1 ? 'head-nav active' : 'head-nav'"
@click="doNav(1)"
v-if="1 == 2"
>
项目概况
</div>
<div
:class="nav == 2 ? 'head-nav active' : 'head-nav'"
@click="doNav(2)"
v-if="1 == 2"
>
项目详情
</div>
<div
:class="nav == 7 ? 'head-nav active' : 'head-nav'"
@click="doNav(7)"
v-if="1 == 2"
>
劳务管理
</div>
<div :class="(nav >= 100 && nav < 200) || nav == 1 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
<div
:class="
(nav >= 100 && nav < 200) || nav == 1
? 'head-nav active'
: 'head-nav'
"
style="position: relative"
class="has-submenu"
>
<div>项目概况</div>
<div class="header-btn-list">
<div class="header-btn-list-arrow"></div>
<div class="header-btn-list-item" style>
<div class="header-btn-list-padding menu-row1" style="text-align: left">
<button type="button" :class="nav == 101 ? 'active' : ''" class="sub-btn" @click="doNav(101)"></button>
<button type="button" :class="nav == 102 ? 'active' : ''" class="sub-btn" @click="doNav(102)"></button>
<div
class="header-btn-list-padding menu-row1"
style="text-align: left"
>
<button
type="button"
:class="nav == 101 ? 'active' : ''"
class="sub-btn"
@click="doNav(101)"
>
项目详情
</button>
<button
type="button"
:class="nav == 102 ? 'active' : ''"
class="sub-btn"
@click="doNav(102)"
>
劳务管理
</button>
</div>
</div>
</div>
</div>
<div :class="(nav >= 300 && nav < 400) || nav == 3 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
<div
:class="
(nav >= 300 && nav < 400) || nav == 3
? 'head-nav active'
: 'head-nav'
"
style="position: relative"
class="has-submenu"
>
<div>安全管理</div>
<div class="header-btn-list">
<div class="header-btn-list-arrow"></div>
<div class="header-btn-list-item" style>
<div class="header-btn-list-padding menu-row1" style="text-align: left">
<button type="button" :class="nav == 301 ? 'active' : ''" class="sub-btn" @click="doNav(301)"></button>
<div
class="header-btn-list-padding menu-row1"
style="text-align: left"
>
<button
type="button"
:class="nav == 301 ? 'active' : ''"
class="sub-btn"
@click="doNav(301)"
>
安全隐患排查
</button>
<!-- <button type="button" :class="nav == 302 ? 'active' : ''" class="sub-btn" @click="doNav(302)"></button> -->
<button type="button" :class="nav == 303 ? 'active' : ''" class="sub-btn" @click="doNav(303)"></button>
<button type="button" :class="nav == 304 ? 'active' : ''" class="sub-btn" @click="doNav(304)"></button>
<button
type="button"
:class="nav == 303 ? 'active' : ''"
class="sub-btn"
@click="doNav(303)"
>
基坑监测
</button>
<button
type="button"
:class="nav == 304 ? 'active' : ''"
class="sub-btn"
@click="doNav(304)"
>
塔机监测
</button>
</div>
<div class="header-btn-list-padding menu-row1" style="text-align: left">
<div
class="header-btn-list-padding menu-row1"
style="text-align: left"
>
<!-- <button type="button" :class="nav == 305 ? 'active' : ''" class="sub-btn" @click="doNav(305)"></button> -->
<button type="button" :class="nav == 306 ? 'active' : ''" class="sub-btn" @click="doNav(306)"></button>
<button
type="button"
:class="nav == 306 ? 'active' : ''"
class="sub-btn"
@click="doNav(306)"
>
配电箱监测
</button>
<!-- <button type="button" :class="nav == 307 ? 'active' : ''" class="sub-btn" @click="doNav(307)"></button>
<button type="button" :class="nav == 308 ? 'active' : ''" class="sub-btn" @click="doNav(308)"></button>-->
</div>
<div class="header-btn-list-padding menu-row1" style="text-align: left">
<button type="button" :class="nav == 309 ? 'active' : ''" class="sub-btn" @click="doNav(309)"></button>
<button type="button" :class="nav == 310 ? 'active' : ''" class="sub-btn" @click="doNav(310)">AI</button>
<div
class="header-btn-list-padding menu-row1"
style="text-align: left"
>
<button
type="button"
:class="nav == 309 ? 'active' : ''"
class="sub-btn"
@click="doNav(309)"
>
视频监控
</button>
<button
type="button"
:class="nav == 310 ? 'active' : ''"
class="sub-btn"
@click="doNav(310)"
>
AI预警
</button>
<!-- <button type="button" :class="nav == 311 ? 'active' : ''" class="sub-btn" @click="doNav(311)"></button> -->
</div>
</div>
</div>
</div>
<div :class="(nav >= 400 && nav < 500) || nav == 4 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
<div
:class="
(nav >= 400 && nav < 500) || nav == 4
? 'head-nav active'
: 'head-nav'
"
style="position: relative"
class="has-submenu"
>
<div>质量管理</div>
<div class="header-btn-list">
<div class="header-btn-list-arrow"></div>
<div class="header-btn-list-item" style>
<div class="header-btn-list-padding menu-row1" style="text-align: left">
<button type="button" :class="nav == 401 ? 'active' : ''" class="sub-btn" @click="doNav(401)"></button>
<div
class="header-btn-list-padding menu-row1"
style="text-align: left"
>
<button
type="button"
:class="nav == 401 ? 'active' : ''"
class="sub-btn"
@click="doNav(401)"
>
质量隐患排查
</button>
<!--
<button type="button" :class="nav == 402 ? 'active' : ''" class="sub-btn" @click="doNav(402)"></button>
<button type="button" :class="nav == 403 ? 'active' : ''" class="sub-btn" @click="doNav(403)"></button>
@ -66,14 +186,39 @@
</div>
</div>
</div>
<div :class="(nav >= 500 && nav < 600) || nav == 5 ? 'head-nav active' : 'head-nav'" style="position: relative" class="has-submenu">
<div
:class="
(nav >= 500 && nav < 600) || nav == 5
? 'head-nav active'
: 'head-nav'
"
style="position: relative"
class="has-submenu"
>
<div>进度管理</div>
<div class="header-btn-list">
<div class="header-btn-list-arrow"></div>
<div class="header-btn-list-item" style>
<div class="header-btn-list-padding menu-row1" style="text-align: left">
<button type="button" :class="nav == 502 ? 'active' : ''" class="sub-btn" @click="doNav(502)"></button>
<button type="button" :class="nav == 501 ? 'active' : ''" class="sub-btn" @click="doNav(501)"></button>
<div
class="header-btn-list-padding menu-row1"
style="text-align: left"
>
<button
type="button"
:class="nav == 502 ? 'active' : ''"
class="sub-btn"
@click="doNav(502)"
>
进度管理
</button>
<button
type="button"
:class="nav == 501 ? 'active' : ''"
class="sub-btn"
@click="doNav(501)"
>
延时摄影
</button>
</div>
</div>
</div>
@ -81,34 +226,90 @@
</div>
</el-col>
<el-col :span="8" class="header-center">
<img class="prj-logo" :src="selProject.setting.orgLogo" v-if="selProject && selProject.setting && selProject.setting.orgLogo" />
<span class="sp-title">{{ selProject?.setting?.orgName || selProject?.projectName || "数字建安施工管理平台" }}</span>
<img
class="prj-logo"
:src="selProject.setting.orgLogo"
v-if="selProject && selProject.setting && selProject.setting.orgLogo"
/>
<span class="sp-title">{{
selProject?.setting?.orgName ||
selProject?.projectName ||
"数字建安施工管理平台"
}}</span>
</el-col>
<el-col :span="8">
<div class="head-title-tab" style="display: inline-flex">
<div :class="nav == 6 ? 'head-nav active' : 'head-nav'" @click="doNav(6)">绿</div>
<div :class="nav == 7 ? 'head-nav active' : 'head-nav'" @click="doNav(7)">BIM</div>
<div class="head-title-tab" style="display: inline-block">
<div
:class="nav == 6 ? 'head-nav active' : 'head-nav'"
@click="doNav(6)"
>
绿碳中心
</div>
</div>
<div class="header-title-user-info" style="display: inline-block; float: right">
<el-select v-model="selProjectId" popper-class="header-sel-project-pop" @change="doProjectSelect">
<el-option v-for="it in projects" :key="it.id" :label="it.projectName" :value="it.id"></el-option>
<div
class="header-title-user-info"
style="display: inline-block; float: right"
>
<el-select
v-model="selProjectId"
popper-class="header-sel-project-pop"
@change="doProjectSelect"
>
<el-option
v-for="it in projects"
:key="it.id"
:label="it.projectName"
:value="it.id"
></el-option>
</el-select>
<span class="command" @click="doLogout">
{{ nickName }}
<i class="el-icon-switch-button"></i>
</span>
</div>
<i class="set-fullscreen set-font-size" style="margin-left: 16px; position: absolute; top: 0px; right: 24px" @click="toggleFullScreen">
<svg class="icon" v-if="!isFullScreen" style="width: 20px; vertical-align: middle; fill: currentColor; overflow: hidden" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3304">
<i
class="set-fullscreen set-font-size"
style="margin-left: 16px; position: absolute; top: 0px; right: 24px"
@click="toggleFullScreen"
>
<svg
class="icon"
v-if="!isFullScreen"
style="
width: 20px;
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3304"
>
<path
d="M145.066667 85.333333h153.6c25.6 0 42.666667-17.066667 42.666666-42.666666S324.266667 0 298.666667 0H34.133333C25.6 0 17.066667 8.533333 8.533333 17.066667 0 25.6 0 34.133333 0 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666666s42.666667-17.066667 42.666666-42.666666V145.066667l230.4 230.4c17.066667 17.066667 42.666667 17.066667 59.733334 0 17.066667-17.066667 17.066667-42.666667 0-59.733334L145.066667 85.333333z m170.666666 563.2L162.133333 802.133333l-76.8 76.8V725.333333C85.333333 699.733333 68.266667 682.666667 42.666667 682.666667s-42.666667 17.066667-42.666667 42.666666v256c0 25.6 17.066667 42.666667 42.666667 42.666667h256c25.6 0 42.666667-17.066667 42.666666-42.666667s-17.066667-42.666667-42.666666-42.666666H145.066667l76.8-76.8 153.6-153.6c17.066667-17.066667 17.066667-42.666667 0-59.733334-17.066667-17.066667-42.666667-17.066667-59.733334 0z m665.6 34.133334c-25.6 0-42.666667 17.066667-42.666666 42.666666v153.6l-76.8-76.8-153.6-153.6c-17.066667-17.066667-42.666667-17.066667-59.733334 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l153.6 153.6 76.8 76.8H725.333333c-25.6 0-42.666667 17.066667-42.666666 42.666666s17.066667 42.666667 42.666666 42.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666666z m0-682.666667h-256c-25.6 0-42.666667 17.066667-42.666666 42.666667s17.066667 42.666667 42.666666 42.666666h153.6l-76.8 76.8-153.6 153.6c-17.066667 17.066667-17.066667 42.666667 0 59.733334 17.066667 17.066667 42.666667 17.066667 59.733334 0l153.6-153.6 76.8-76.8v153.6c0 25.6 17.066667 42.666667 42.666666 42.666666s42.666667-17.066667 42.666667-42.666666v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z"
fill
p-id="3305" />
p-id="3305"
/>
</svg>
<svg class="icon" v-else style="width: 24px; vertical-align: middle; fill: currentColor; overflow: hidden" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3952">
<svg
class="icon"
v-else
style="
width: 24px;
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3952"
>
<path
d="M384 597.333333h-256c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h153.6L17.066667 947.2c-17.066667 17.066667-17.066667 42.666667 0 59.733333 17.066667 17.066667 42.666667 17.066667 59.733333 0L341.333333 742.4v153.6c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z m358.4 85.333334h153.6c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667h-256c-25.6 0-42.666667 17.066667-42.666667 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666667s42.666667-17.066667 42.666667-42.666667V742.4l264.533333 264.533333c17.066667 17.066667 42.666667 17.066667 59.733333 0 17.066667-17.066667 17.066667-42.666667 0-59.733333L742.4 682.666667zM640 426.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667s-17.066667-42.666667-42.666667-42.666667H742.4L1006.933333 76.8c17.066667-17.066667 17.066667-42.666667 0-59.733333-17.066667-17.066667-42.666667-17.066667-59.733333 0L682.666667 281.6V128c0-25.6-17.066667-42.666667-42.666667-42.666667s-42.666667 17.066667-42.666667 42.666667v256c0 25.6 17.066667 42.666667 42.666667 42.666667z m-256-341.333334c-25.6 0-42.666667 17.066667-42.666667 42.666667v153.6L76.8 8.533333C59.733333 0 25.6 0 8.533333 8.533333 0 25.6 0 59.733333 8.533333 76.8L281.6 341.333333H128c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667h256c25.6 0 42.666667-17.066667 42.666667-42.666667v-256c0-25.6-17.066667-42.666667-42.666667-42.666667z"
p-id="3953" />
p-id="3953"
/>
</svg>
</i>
</el-col>
@ -141,6 +342,14 @@ export default {
},
},
mounted() {
if (location.href.includes("#/detail?prjId=")) {
const urlParams = new URLSearchParams(location.href.split("?")[1]);
const prjId = urlParams.get("prjId");
localStorage.setItem("selProj", prjId);
setTimeout(() => {
location.hash = "#/detail";
}, 800);
}
window.xapp = this;
let prjTitle = localStorage.getItem("prj_title");
document.title = prjTitle || document.title;
@ -218,9 +427,6 @@ export default {
case 6:
this.$router.push("/greenCarbon");
break;
case 7:
this.$router.push("/bimManage");
break;
case 102:
this.$router.push("/labor");
break;
@ -260,7 +466,7 @@ export default {
margin-right: 30px;
position: relative;
top: -5px;
width: 200px;
width: 250px;
right: 10px;
}
}
@ -340,9 +546,6 @@ export default {
top: 60px !important;
}
@media (min-width: 1921px) and (max-width: 2560px) {
.header-sel-project-pop {
top: 68px !important;
}
.div-header {
.head-nav {
font-size: 18px;
@ -376,7 +579,7 @@ export default {
transform: scale(1.5) !important;
margin-right: 60px !important;
width: 220px !important;
width: 260px !important;
right: 10px !important;
}
}
@ -404,9 +607,6 @@ export default {
}
@media (min-width: 2561px) {
.header-sel-project-pop {
top: 78px !important;
}
.header-center {
font-size: 52px !important;
padding: 0px 60px;

View File

@ -1,12 +1,28 @@
<template>
<div :class="{ 'has-logo': showLogo }" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
<div
:class="{ 'has-logo': showLogo }"
:style="{
backgroundColor:
sideTheme === 'theme-dark'
? variables.menuBackground
: variables.menuLightBackground,
}"
>
<logo v-if="showLogo" :collapse="isCollapse" />
<el-scrollbar :class="sideTheme" wrap-class="scrollbar-wrapper">
<el-menu
:default-active="activeMenu"
:collapse="isCollapse"
:background-color="sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground"
:text-color="sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor"
:background-color="
sideTheme === 'theme-dark'
? variables.menuBackground
: variables.menuLightBackground
"
:text-color="
sideTheme === 'theme-dark'
? variables.menuColor
: variables.menuLightColor
"
:unique-opened="true"
:active-text-color="theme"
:collapse-transition="false"
@ -24,19 +40,29 @@
</template>
<script setup>
import Logo from './Logo'
import SidebarItem from './SidebarItem'
import variables from '@/assets/styles/variables.module.scss'
import useAppStore from '@/store/modules/app'
import useSettingsStore from '@/store/modules/settings'
import usePermissionStore from '@/store/modules/permission'
import Logo from "./Logo";
import SidebarItem from "./SidebarItem";
import variables from "@/assets/styles/variables.module.scss";
import useAppStore from "@/store/modules/app";
import useSettingsStore from "@/store/modules/settings";
import usePermissionStore from "@/store/modules/permission";
import useUserStore from "@/store/modules/user";
const route = useRoute();
const appStore = useAppStore()
const settingsStore = useSettingsStore()
const permissionStore = usePermissionStore()
const appStore = useAppStore();
const settingsStore = useSettingsStore();
const permissionStore = usePermissionStore();
const userStore = useUserStore();
const sidebarRouters = computed(() => permissionStore.sidebarRouters);
const sidebarRouters = computed(() => {
let tmps = permissionStore.sidebarRouters;
tmps.forEach((item) => {
if (item.meta && item.meta.title == "项目大屏") {
item.name += "?prjId=" + userStore.currentPrjId;
item.path += "?prjId=" + userStore.currentPrjId;
}
});
return tmps;
});
const showLogo = computed(() => settingsStore.sidebarLogo);
const sideTheme = computed(() => settingsStore.sideTheme);
const theme = computed(() => settingsStore.theme);
@ -49,6 +75,5 @@ const activeMenu = computed(() => {
return meta.activeMenu;
}
return path;
})
});
</script>

View File

@ -77,6 +77,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import { emitter } from "@/router/index.js";
import { devicePositionGet, devicePositionAddItems, devicePositionUpdateItems } from "@/api/bim/bim.js";
import icons from "./icons.js";
import { debounce } from "lodash-es";
export default {
name: "SandTableSetting",
components: {
@ -120,7 +121,10 @@ export default {
this.initEngine();
},
methods: {
doSave() {
doSave: debounce(function () {
this.toSave();
}, 300),
toSave() {
this.$confirm("确认保存修改?", "提示", {
type: "warning",
confirmButtonText: "确 认",