From e0b57d70b0ef5e27264c51840ca96d04c1c62739 Mon Sep 17 00:00:00 2001 From: "lj7788@126.com" Date: Tue, 24 Jun 2025 15:21:35 +0800 Subject: [PATCH] =?UTF-8?q?BIM=E4=BA=A4=E5=BA=95=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yanzhu-bigscreen/package.json | 4 +- yanzhu-bigscreen/src/components/header.vue | 5 +- yanzhu-bigscreen/src/router/index.js | 82 ++-- .../src/views/bim/briefingTools.js | 99 +++-- .../src/views/bim4DSimulation.vue | 360 ++++++++++++++++ yanzhu-bigscreen/src/views/bimBriefing.vue | 129 +++++- .../src/views/bimRoaming copy.vue | 398 ------------------ .../src/views/safety/safetyCheck.vue | 4 +- yanzhu-bigscreen/yarn.lock | 103 ++++- .../resources/mapper/system/SysUserMapper.xml | 2 +- ...roProjectInfoSubdeptsUsersServiceImpl.java | 4 +- .../SurProjectAttendanceUserServiceImpl.java | 5 +- .../src/layout/components/Sidebar/index.vue | 2 +- 13 files changed, 695 insertions(+), 502 deletions(-) create mode 100644 yanzhu-bigscreen/src/views/bim4DSimulation.vue delete mode 100644 yanzhu-bigscreen/src/views/bimRoaming copy.vue diff --git a/yanzhu-bigscreen/package.json b/yanzhu-bigscreen/package.json index 2eb41b5c..c5061d8a 100644 --- a/yanzhu-bigscreen/package.json +++ b/yanzhu-bigscreen/package.json @@ -15,6 +15,8 @@ "element-ui": "^2.15.13", "emittery": "^0.8.1", "file-saver": "2.0.5", + "gantt-elastic": "^1.0.12", + "gantt-elastic-header": "^0.1.11", "gsap": "^3.12.2", "js-cookie": "^3.0.5", "less": "^4.1.3", @@ -34,10 +36,10 @@ "@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0", "@vue/cli-service": "~5.0.0", - "svg-sprite-loader": "^6.0.11", "eslint": "^7.32.0", "eslint-plugin-vue": "^8.0.3", "javascript-obfuscator": "^4.1.1", + "svg-sprite-loader": "^6.0.11", "vue-template-compiler": "^2.6.14", "webpack-obfuscator": "^3.5.1" }, diff --git a/yanzhu-bigscreen/src/components/header.vue b/yanzhu-bigscreen/src/components/header.vue index 13ede69b..0c708f26 100644 --- a/yanzhu-bigscreen/src/components/header.vue +++ b/yanzhu-bigscreen/src/components/header.vue @@ -235,7 +235,7 @@ export default { this.showMenus = objs; this.showMenusNavIds = this.showMenus.map((d) => d.navId); let tmps = this.showMenusNavIds.filter((item) => [1, 2, 3, 4, 5, 6, 7].includes(+item)); - if (!tmps.includes(2) && !this.showMenusNavIds.includes(""+this.nav)) { + if (!tmps.includes(2) && !this.showMenusNavIds.includes("" + this.nav)) { let nav = tmps[0]; nav = tmps[0]; tmps = this.showMenusNavIds.filter((item) => String(item).startsWith(nav + "")); @@ -296,6 +296,9 @@ export default { case 704: this.$router.push("/bimBriefing"); break; + case 705: + this.$router.push("/bim4DSimulation"); + break; case 701: this.$router.push("/bimManage"); break; diff --git a/yanzhu-bigscreen/src/router/index.js b/yanzhu-bigscreen/src/router/index.js index f55bf2e6..6335498d 100644 --- a/yanzhu-bigscreen/src/router/index.js +++ b/yanzhu-bigscreen/src/router/index.js @@ -1,11 +1,11 @@ import Vue from "vue"; import VueRouter from "vue-router"; -const originalPush = VueRouter.prototype.push +const originalPush = VueRouter.prototype.push; // 解决ElementUI导航栏中的vue-router在3.0版本以上重复点菜单报错问题 VueRouter.prototype.push = function push(location) { - return originalPush.call(this, location).catch(err => err) -} + return originalPush.call(this, location).catch((err) => err); +}; Vue.use(VueRouter); const routes = [ @@ -13,143 +13,115 @@ const routes = [ path: "/", name: "index", meta: { nav: 1 }, - component: () => - import(/* webpackChunkName: "index" */ "../views/index.vue"), + component: () => import(/* webpackChunkName: "index" */ "../views/index.vue"), }, { path: "/detail", name: "detail", meta: { nav: 101 }, - component: () => - import(/* webpackChunkName: "detail" */ "../views/projectDetail.vue"), + component: () => import(/* webpackChunkName: "detail" */ "../views/projectDetail.vue"), }, { path: "/labor", name: "labor", meta: { nav: 102 }, - component: () => - import(/* webpackChunkName: "labor" */ "../views/projectLabor.vue"), + component: () => import(/* webpackChunkName: "labor" */ "../views/projectLabor.vue"), }, { path: "/prjSafety", name: "prjSafety", meta: { nav: 21 }, - component: () => - import(/* webpackChunkName: "safety" */ "../views/projectSafety.vue"), + component: () => import(/* webpackChunkName: "safety" */ "../views/projectSafety.vue"), }, { path: "/prjQuality", name: "prjQuality", meta: { nav: 22 }, - component: () => - import(/* webpackChunkName: "quality" */ "../views/projectQuality.vue"), + component: () => import(/* webpackChunkName: "quality" */ "../views/projectQuality.vue"), }, { path: "/prjProgress", name: "prjProgress", meta: { nav: 23 }, - component: () => - import(/* webpackChunkName: "progress" */ "../views/projectProgress.vue"), + component: () => import(/* webpackChunkName: "progress" */ "../views/projectProgress.vue"), }, { path: "/greenCarbon", name: "greenCarbon", meta: { nav: 6 }, - component: () => - import(/* webpackChunkName: "greenCarbon" */ "../views/greenCarbon.vue"), + component: () => import(/* webpackChunkName: "greenCarbon" */ "../views/greenCarbon.vue"), }, { path: "/bimManage", name: "bimManage", meta: { nav: 701 }, - component: () => - import(/* webpackChunkName: "bimManage" */ "../views/bimManage.vue"), + component: () => import(/* webpackChunkName: "bimManage" */ "../views/bimManage.vue"), }, { path: "/bimRoaming", name: "bimRoaming", meta: { nav: 702 }, - component: () => - import(/* webpackChunkName: "bimRoaming" */ "../views/bimRoaming.vue"), + component: () => import(/* webpackChunkName: "bimRoaming" */ "../views/bimRoaming.vue"), }, { path: "/bimBriefing", name: "bimBriefing", meta: { nav: 704 }, - component: () => - import(/* webpackChunkName: "bimBriefing" */ "../views/bimBriefing.vue"), + component: () => import(/* webpackChunkName: "bimBriefing" */ "../views/bimBriefing.vue"), + }, + { + path: "/bim4DSimulation", + name: "bim4DSimulation", + meta: { nav: 7045 }, + component: () => import(/* webpackChunkName: "bim4DSimulation" */ "../views/bim4DSimulation.vue"), }, { path: "/videoMonitor", name: "videoMonitor", meta: { nav: 309 }, - component: () => - import( - /* webpackChunkName: "videoMonitor" */ "../views/videoMonitor.vue" - ), + component: () => import(/* webpackChunkName: "videoMonitor" */ "../views/videoMonitor.vue"), }, { path: "/safetyCheck", name: "safetyCheck", meta: { nav: 301 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/safety/safetyCheck.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/safety/safetyCheck.vue"), }, { path: "/towerCrane", name: "towerCrane", meta: { nav: 304 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/safety/towerCrane.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/safety/towerCrane.vue"), }, { path: "/powerIot", name: "powerIot", meta: { nav: 306 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/safety/powerIot.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/safety/powerIot.vue"), }, { path: "/dumbwaiter", name: "dumbwaiter", meta: { nav: 308 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/safety/dumbwaiter.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/safety/dumbwaiter.vue"), }, { path: "/aiWarning", name: "aiWarning", meta: { nav: 310 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/safety/aiWarning.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/safety/aiWarning.vue"), }, { path: "/photography", name: "photography", meta: { nav: 501 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/schedule/photography.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/schedule/photography.vue"), }, { path: "/planSchedule", name: "planSchedule", meta: { nav: 502 }, - component: () => - import( - /* webpackChunkName: "safetyCheck" */ "../views/schedule/planSchedule.vue" - ), + component: () => import(/* webpackChunkName: "safetyCheck" */ "../views/schedule/planSchedule.vue"), }, ]; const router = new VueRouter({ diff --git a/yanzhu-bigscreen/src/views/bim/briefingTools.js b/yanzhu-bigscreen/src/views/bim/briefingTools.js index 221c3fb6..9c2fb1c4 100644 --- a/yanzhu-bigscreen/src/views/bim/briefingTools.js +++ b/yanzhu-bigscreen/src/views/bim/briefingTools.js @@ -51,7 +51,6 @@ function dataFiltering(that, id) { function getProperty(that) { let api = bimBriefingApi; api.Feature.getByEvent(true, (n) => { - console.log(n); if (n && n["id"]) { let featureId = n.id; if (featureId.split("^")[1]) { @@ -108,15 +107,6 @@ function subFeatureSize(that) { api.Feature.setColor(featureId, "rgba(255,0,255,1)", modelId); that.selFeatureId = featureId; that.info = result; - // api.Measurement.featureArea(featureId, (res) => { - // result[1].data = [{ name: "面积", value: ((+res || 0) * unit * unit * 1.0).toFixed(2) + "" }]; - // api.Measurement.featureVolume(featureId, (res) => { - // result[2].data = [{ name: "体积", value: ((+res || 0) * unit * unit * unit * 1.0).toFixed(2) }]; - // api.Feature.setColor(featureId, "rgba(255,0,255,1)", modelId); - // that.selFeatureId = featureId; - // that.info=result - // }); - // }); }); } }); @@ -145,26 +135,85 @@ function measurementArea(that) { function measuringVolume(that) {} //构件距离 function distance(that) { - let api = bimBriefingApi; - that.info = []; + let api = bimBriefingApi; + let result = [{ name: "测量结果", data: [] }]; + that.$message.info("请在模型中点击两点,右键结束测量"); api.Public.clearHandler(); api.Measurement.clearAllTrace(); - //开始测量,左键选点 - api.Measurement.distance(true, (data) => { - console.log(data); - }); + let unit = 1; + api.Feature.getByEvent(true, (n) => { + if (n && n["id"]) { + let featureId = n.id; + let modelId = featureId.split("^")[0]; + unit = getModelUnit(that, modelId); + } + }); + //开始测量,左键选点 + api.Measurement.distance(true, (data) => { + result[0].data = [ + { + name: "距离", + value: (data.distance * unit).toFixed(2), + }, + { name: "X", value: data.x.toFixed(2) }, + { name: "Y", value: data.y.toFixed(2) }, + { name: "Z", value: data.z.toFixed(2) }, + ]; + that.info = result; + }); - //右键结束测量 - api.Public.event("RIGHT_CLICK", (res) => { - api.Measurement.distance(false); - }); + api.Public.event("LEFT_CLICK", (res) => { + api.Measurement.clearAllTrace(); + }); + //右键结束测量 + api.Public.event("RIGHT_CLICK", (res) => { + api.Measurement.distance(false); + }); +} +function getModels(that) { + return that.models.map((d) => d.modelId); +} +//剖切 +function initClipping(that) { + let api = bimBriefingApi; + api.Model.clipByBox(getModels(that)); } -//剖切 -function initClipping(that) {} - //构件隐藏 -function actorVisible() {} +function actorVisible() { + let api = bimBriefingApi; + api.Feature.getByEvent(true, (n) => { + if (n && n["id"]) { + let featureId = n.id; + let modelId = featureId.split("^")[0]; + api.Feature.setVisible(featureId, false); + that.hideFeatureIds.push(featureId); + } + }); +} + +function clearEvent(that) { + let api = bimBriefingApi; + if (api) { + actorShow(that); + api.Feature.getByEvent(false); + api.Model.closeClip(); + api.Model.clearBoundsBox(); + api.Measurement.setFaceToFaceState(!1); + api.Measurement.setPointToFaceVerticalDistanceState(!1); + api.Public.clearAllDrawObject(); + api.Feature.getByEvent(!1); + api.Measurement.angle(!1); + api.Measurement.distance(!1); + api.Measurement.clearAllTrace(); + } +} +function actorShow(that) { + let api = bimBriefingApi; + getModels(that).forEach((id) => { + api.Model.original(id); + }); +} export default { measurementArea, @@ -175,4 +224,6 @@ export default { distance, initClipping, actorVisible, + actorShow, + clearEvent, }; diff --git a/yanzhu-bigscreen/src/views/bim4DSimulation.vue b/yanzhu-bigscreen/src/views/bim4DSimulation.vue new file mode 100644 index 00000000..5f56e709 --- /dev/null +++ b/yanzhu-bigscreen/src/views/bim4DSimulation.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/yanzhu-bigscreen/src/views/bimBriefing.vue b/yanzhu-bigscreen/src/views/bimBriefing.vue index 79282b8f..c25051cc 100644 --- a/yanzhu-bigscreen/src/views/bimBriefing.vue +++ b/yanzhu-bigscreen/src/views/bimBriefing.vue @@ -65,7 +65,7 @@ -