From 70bebe9dae89ebddd7e77543aac618e78d730fc9 Mon Sep 17 00:00:00 2001
From: gjj <Ganjj@probim.com.cn>
Date: Wed, 26 Feb 2025 16:39:32 +0800
Subject: [PATCH] 样式调整
---
/dev/null | 264 --------------------------------------------
src/views/ProjectView.vue | 20 ++-
src/store/modules/common.js | 10 +
src/components/Header.vue | 5
src/views/Home.vue | 37 +++++
src/utils/getToken.js | 4
src/views/EquipmentView.vue | 12 +-
7 files changed, 65 insertions(+), 287 deletions(-)
diff --git a/src/components/Header.vue b/src/components/Header.vue
index 2464fa2..e37f15e 100644
--- a/src/components/Header.vue
+++ b/src/components/Header.vue
@@ -2,7 +2,7 @@
* @Author: gjj Ganjj@probim.com.cn
* @Date: 2025-02-14 14:32:18
* @LastEditors: gjj Ganjj@probim.com.cn
- * @LastEditTime: 2025-02-25 11:47:12
+ * @LastEditTime: 2025-02-26 15:50:22
* @FilePath: \北京交通大学\src\components\Header.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
@@ -72,9 +72,6 @@
},
onHomeClick(tab) {
this.activeTab = tab;
- },
- onProjectChange(data) {
- this.$store.commit("common/setCurrentProject", data);
},
updateTime() {
const now = new Date();
diff --git a/src/components/MenuList.vue b/src/components/MenuList.vue
deleted file mode 100644
index c08b441..0000000
--- a/src/components/MenuList.vue
+++ /dev/null
@@ -1,264 +0,0 @@
-<template>
- <div class="menuListWrapper inline-block rounded-tr-[34px] rounded-br-[34px] w-[13.5rem] h-[45rem]">
- <router-link
- v-for="item in localMenusFiltered"
- :key="item.id"
- :to="item.to"
- class="relative z-[100] menuItem flex items-center pl-6 py-[9px] pr-5 my-3 cursor-pointer"
- active-class="activated"
- exact
- >
- <img class="w-8" :src="item.icon" :alt="item.label" />
- <div class="ml-[12px] text-[18px] text-[#FFF] text-opacity-60 menuName">{{ item.label }}</div>
- </router-link>
- <div
- v-for="item in thirdMenus"
- :key="item.id"
- class="relative z-[100] thirdMenuItem flex items-center pl-6 py-[9px] pr-5 my-3"
- :class="{
- 'cursor-pointer': item.subMenus?.length > 0,
- 'cursor-not-allowed': !item.subMenus || item.subMenus.length === 0,
- hovered: activatedThirdMenu2?.id === item.id,
- activated: activatedThirdMenu?.id === item.id,
- }"
- @mouseenter="onThirdMenuEnter(item)"
- @mouseleave="onThirdMenuLeave(item)"
- >
- <img class="w-8" :src="item.icon" :alt="item.label" />
- <div class="ml-[12px] font-pingfang text-[18px] text-[#FFF] text-opacity-60 menuName">{{ item.label }}</div>
- <div v-show="item.subMenus?.length && activatedThirdMenu2?.id === item.id" class="absolute top-6 left-full min-w-[260px] submenusWrapper">
- <div
- v-for="submenu in item.subMenus"
- :key="submenu.id"
- @click.stop="onThirdMenuClick(submenu, item)"
- class="submenuItem"
- :class="{ activated: activatedThirdSubmenu?.id === submenu.id }"
- >
- <a v-if="submenu.needInvokeLocalApp" :href="submenu.to" target="_blank">{{ submenu.label }}</a>
- <span v-else>{{ submenu.label }}</span>
- </div>
- </div>
- </div>
- </div>
-</template>
-
-<script>
- import CryptoJS from "crypto-js";
- import { Message } from "element-ui";
- import { mapGetters } from "vuex";
-
- let workflowLoginURL;
- let workflowWebURL;
- let pid;
- if (import.meta.env.PROD) {
- //生产环境
- const ProjectConfig = window.ProjectConfig;
- workflowLoginURL = ProjectConfig.workflowLoginURL;
- workflowWebURL = ProjectConfig.workflowWebURL;
- pid = ProjectConfig.pid;
- } else {
- //非生产环境
- workflowLoginURL = "http://workflow-newapi.probim.cn/api/User/Home/Login";
- workflowWebURL = "http://workflow.probim.cn";
- pid = "71f7a5df-a7e3-42f4-bcea-36d7d2924ddd";
- }
-
- export default {
- name: "MenuList",
- data() {
- return {
- activatedThirdMenu2: null,
- PublicKey: "MK4ZJF10PRO19*#8",
- };
- },
- computed: {
- ...mapGetters("common", [
- "localMenus",
- "thirdMenus",
- "activatedThirdSubmenu",
- "activatedThirdMenu",
- "currentProjectId",
- "projectIdsWithoutMoldBase",
- "projectIdPNMap",
- "aiJumpThirdPage"
- ]),
- localMenusFiltered() {
- if (this.projectIdsWithoutMoldBase.includes(this.currentProjectId)) {
- return this.localMenus.filter((item) => item.id !== "mold-base");
- } else {
- return this.localMenus;
- }
- },
- },
- watch: {
- aiJumpThirdPage: {
- deep: true,
- handler(n, o) {
- if(n && n.self) {
- this.onThirdMenuClick(n.self, n.parent)
- }
- },
- },
- },
- methods: {
- onThirdMenuClick(item, parentItem) {
- if (item?.isLocal === true) {
- if (this.$route.path === item.to) return;
- item?.to &&
- this.$router?.push(item.to).then(() => {
- this.$store.commit("common/setActivatedThirdMenu", parentItem);
- this.$store.commit("common/setActivatedThirdSubmenu", item);
- });
- } else {
- if (item?.needInvokeLocalApp) {
- return;
- } else if (item?.needLocalHandle) {
- const id = item.id;
- if (id === "construction-1") {
- //绿色建造九宫格管理系统
- this.doVmsEnvmonitorLoginRedirect();
- } else if (id === "construction-2") {
- //协同
- this.doSelfLoginRedirect(item);
- } else if (id === "construction-3") {
- const pn = this.projectIdPNMap[this.currentProjectId];
- if (!/^\s*$/i.test(pn + "")) {
- window.open(`http://xmglappjs.sh2j.com/web/public/index.php/fanganapi/index/index?pn=${pn}`);
- }
- }
- } else {
- item?.to && window.open(item.to);
- }
- }
- },
- onThirdMenuEnter(item) {
- this.activatedThirdMenu2 = item;
- },
- // eslint-disable-next-line no-unused-vars
- onThirdMenuLeave(item) {
- this.activatedThirdMenu2 = null;
- },
-
- //登录绿色建造九宫格管理系统
- async doVmsEnvmonitorLoginRedirect() {
- window.open("http://127.0.0.1:9000/vms-envmonitor-webapp/");
- },
-
- //登录自己的协同平台
- async doSelfLoginRedirect(item) {
- const userInfo = {
- UserName: "huangtj_0909@163.com",
- Password: this.computepwdstr("htj123456" + this.PublicKey, CryptoJS),
- };
- // const userInfo = {
- // UserName: "admin",
- // Password: this.computepwdstr("admin" + this.PublicKey, CryptoJS),
- // };
- const postData = Object.keys(userInfo)
- .map((key) => {
- return `${key}=${encodeURIComponent(userInfo[key])}`;
- })
- .join("&");
- const res = await this.$http({
- method: "post",
- url: workflowLoginURL,
- data: postData,
- withCredentials: false,
- withProjectId: false,
- withToken: false,
- baseURL: "/",
- });
- if (res?.code === 0) {
- const token = res.data?.token;
- if (token) {
- window.open(`${workflowWebURL}/#/Home/Boot/${token}/0/${pid}`);
- } else {
- Message.error({ message: `${item.label}登录失败,请稍后再试`, duration: 1000 * 3 });
- }
- } else {
- Message.error({ message: `${item.label}登录失败,请稍后再试`, duration: 1000 * 3 });
- }
- },
- computepwdstr(pwdorigin, _this_CryptoJS) {
- const afterpwd = this.SymmetricEncryption(
- {
- input: pwdorigin,
- key: this.PublicKey,
- },
- _this_CryptoJS,
- );
- return afterpwd;
- },
- SymmetricEncryption(json, CryptoJS) {
- if (!json || !json.input || !json.key) {
- console.warn("json, json.input and json.key are not allow null!");
- return -1;
- }
- if (json.key.length === 0) {
- console.warn("json.length should not be zero!");
- return -1;
- }
- while (json.key.length < 16) {
- json.key = json.key + json.key;
- }
- const KEY = json.key;
- const IV = "*BIM19FF4KMY0R8*";
- const key = CryptoJS.enc.Utf8.parse(KEY);
- const iv = CryptoJS.enc.Utf8.parse(IV);
- const srcs = CryptoJS.enc.Utf8.parse(json.input);
- const encrypted = CryptoJS.AES.encrypt(srcs, key, {
- iv: iv,
- mode: CryptoJS.mode.CBC,
- padding: CryptoJS.pad.Pkcs7,
- });
- return encrypted.ciphertext.toString();
- },
- },
- };
-</script>
-
-<style lang="scss" scoped>
- .menuListWrapper {
- background: rgba(0,22,26,0.95);
- border-radius: 0px 40px 40px 0px;
- }
- .menuItem:not(.activated):hover {
- background: linear-gradient( 270deg, rgba(0,75,83,0) 0%, rgba(0,135,153,0.3) 100%);
- }
- .menuItem.activated {
- background: linear-gradient( 270deg, rgba(0,75,83,0) 0%, #008C99 100%);
- .menuName {
- @apply text-opacity-100;
- }
- }
-
- .thirdMenuItem:not(.activated).hovered {
- background: linear-gradient( 270deg, rgba(0,75,83,0) 0%, rgba(0,135,153,0.3) 100%);
- }
- .thirdMenuItem.activated {
- background: linear-gradient( 270deg, rgba(0,75,83,0) 0%, #008C99 100%);
- .menuName {
- @apply text-opacity-100;
- }
- }
- .submenusWrapper {
- .submenuItem {
- @apply h-[60px] px-6 flex justify-start items-center font-pingfang text-base bg-[#00161af2] cursor-pointer;
- &:first-of-type {
- @apply rounded-tl-[12px] rounded-tr-[12px];
- &:only-child {
- @apply rounded-bl-[12px] rounded-br-[12px];
- }
- }
- &:last-of-type:not(:first-of-type) {
- @apply rounded-bl-[12px] rounded-br-[12px];
- }
- &:not(.activated):hover {
- @apply bg-[hsla(228,67%,48%,1)];
- }
- &.activated {
- @apply bg-[#485eb7];
- }
- }
- }
-</style>
diff --git a/src/store/modules/common.js b/src/store/modules/common.js
index f43fad6..45426ee 100644
--- a/src/store/modules/common.js
+++ b/src/store/modules/common.js
@@ -2,7 +2,7 @@
* @Author: gjj Ganjj@probim.com.cn
* @Date: 2025-02-14 14:32:19
* @LastEditors: gjj Ganjj@probim.com.cn
- * @LastEditTime: 2025-02-24 17:33:32
+ * @LastEditTime: 2025-02-26 15:44:09
* @FilePath: \北京交通大学\src\store\modules\common.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -11,6 +11,7 @@
state: () => ({
code: null, //用户信息
token: null, //token
+ projectEndDate: null, //项目结束日期
}),
mutations: {
@@ -20,6 +21,9 @@
setToken(state, data) {
state.token = data;
},
+ setProjectEndDate(state, data) {
+ state.projectEndDate = data;
+ },
},
actions: {
setCode(context, data) {
@@ -28,9 +32,13 @@
setToken(context, data) {
context.commit("setToken", data);
},
+ setProjectEndDate(context, data) {
+ context.commit("setProjectEndDate", data);
+ },
},
getters: {
code: (state) => state.code,
token: (state) => state.token,
+ projectEndDate: (state) => state.projectEndDate,
},
};
\ No newline at end of file
diff --git a/src/utils/getToken.js b/src/utils/getToken.js
index 216e492..9713fc6 100644
--- a/src/utils/getToken.js
+++ b/src/utils/getToken.js
@@ -10,4 +10,8 @@
export const getProjectId = () => {
let id = window.ProjectConfig.projectId;
return id;
+}
+export const getProjectEndDate = () => {
+ let endDate = store.getters["common/projectEndDate"];
+ return endDate;
}
\ No newline at end of file
diff --git a/src/views/EquipmentView.vue b/src/views/EquipmentView.vue
index 44315d3..c4dcaae 100644
--- a/src/views/EquipmentView.vue
+++ b/src/views/EquipmentView.vue
@@ -44,7 +44,7 @@
}">
</div>
<div class="equipment-status" :style="sectionStyle">
- <div class="w-full h-[30px] mb-[10px]" :style="{
+ <div class="w-full h-[30px]" :style="{
backgroundImage: `url(${bgImage})`,
backgroundRepeat: 'no-repeat',
backgroundPosition: 'center center',
@@ -71,10 +71,10 @@
<button class="control-btn" :class="{ 'active': currentTab === '升降机监控' }" @click="handleControlBtnClick('升降机监控')">升降机监控</button>
</div>
<div class="divider"></div>
- <div class="progress-bar">
+ <div class="progress-bar px-[10px]">
<div class="label">运行设备总数</div>
<div class="bar flex items-center">
- <div class="progress relative w-[80%] h-[24px]">
+ <div class="progress relative w-[90%] h-[24px]">
<div class="progress-inner" :style="{ width: `${deviceOnline / deviceTotal * 100}%` }"></div>
<div class="progress-blocks">
<div v-for="n in 28" :key="n" class="block" :class="{ 'active': (n-1)/28 * 100 <= (deviceOnline / deviceTotal * 100) }"></div>
@@ -560,7 +560,7 @@
}
.equipment-status {
- padding: 20px 10px;
+ padding: 10px 10px;
height: calc(100% - 5vh);
}
@@ -572,7 +572,7 @@
.status-circles {
display: flex;
justify-content: space-around;
- margin: 20px 0;
+ margin: 15px 0;
}
.progress-circle {
@@ -628,7 +628,7 @@
width: 100%;
height: 1px;
background: linear-gradient(270deg, rgba(94, 161, 209, 0.1) 0%, #4886BC 49%, rgba(48, 104, 165, 0.1) 100%);
- margin: 20px 0;
+ margin: 15px 0;
}
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 24ed95c..ce401b6 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -11,7 +11,7 @@
<div class="time-info-item">
<i class="el-icon-date" style="color: #FFBF00;font-size: 20px;"></i>
<div class="text-white text-[16px] ml-[4px]">工程倒计时/天</div>
- <div class="text-[#FFBF00] text-[24px] font-bold ml-[28px]">175</div>
+ <div class="text-[#FFBF00] text-[24px] font-bold ml-[28px]">{{endDate}}</div>
</div>
<div class="time-line">
</div>
@@ -20,7 +20,7 @@
<div class="bottom-nav">
<div class="content-wrapper mb-[20px]">
<!-- 720菜单 -->
- <div class="side-menu" v-if="currentView === '720'">
+ <div class="side-menu z-[100]" v-if="currentView === '720'">
<el-cascader popper-class="custom-dropdown" v-model="panoValue" :options="panoList" @change="handlePanoChange" :props="{ value: 'id',label: 'label',children: 'Children'}">
</el-cascader>
</div>
@@ -83,7 +83,8 @@
} from "../api/home";
import {
getProjectId,
- getToken
+ getToken,
+ getProjectEndDate
} from "../utils/getToken.js";
export default {
name: 'Home',
@@ -142,8 +143,25 @@
panoValue: [],
backgroundImage: new URL('@/assets/images/backgrounds/cover_bg.png',
import.meta.url).href,
+ endDate: 0,
}
},
+ watch: {
+ projectEndDate:{
+ deep: true,
+ handler (newVal) {
+ console.log('newVal', newVal)
+ const date = new Date(newVal);
+ // 获取当前日期作为Date对象
+ const now = new Date();
+ // 计算两个日期的差异(毫秒)
+ const diffTime = Math.abs(now - date);
+ // 将毫秒转换为天数
+ const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
+ this.endDate = diffDays
+ }
+ }
+ },
computed: {
sectionStyle() {
return {
@@ -152,10 +170,19 @@
backgroundPosition: 'center center',
backgroundSize: '100% 100%'
}
- },
+ },
projectId() {
return getProjectId()
+ },
+ projectEndDate() {
+ return getProjectEndDate()
}
+ },
+ mounted() {
+ setTimeout(() => {
+ console.log('projectEndDate', getProjectEndDate())
+ this.modelShow()
+ }, 1000)
},
methods: {
@@ -186,6 +213,7 @@
})
} else if (view === 'project') {
nextTick(() => {
+ removepano('krpanoSWFObject')
this.sceneShow()
})
}
@@ -256,6 +284,7 @@
})
},
panoPreview(item, scene) {
+ removepano('krpanoSWFObject')
const basepath = `${window.ProjectConfig.panoUrl}/Panorama${item.PbUrl}/vtour/`
const xmlurl = `${basepath}tour.xml?r=${(Math.random() * 100000 + 1)}`
let setting = {}
diff --git a/src/views/ProjectView.vue b/src/views/ProjectView.vue
index f896813..586d7b3 100644
--- a/src/views/ProjectView.vue
+++ b/src/views/ProjectView.vue
@@ -14,7 +14,7 @@
<!-- 下部分 - 内容区域 -->
<div
- class="content flex-1 px-[16px] py-[14px] overflow-y-auto"
+ class="content flex-1 px-[16px] py-[14px] overflow-y-hidden"
:style="{
backgroundImage: `url(${backgroundImage})`,
backgroundRepeat: 'no-repeat',
@@ -77,7 +77,7 @@
backgroundSize: '100% 100%'
}"
>
- <div class="text-white text-[14px] ml-[40px] leading-[35px]">项目名称:{{projectInfo.OrganizeName}}</div>
+ <div class="text-white text-[14px] ml-[40px] leading-[35px]">项目名称:{{projectInfo.ProjectName}}</div>
</div>
<div class="text-white text-[14px] tracking-[1px] leading-[24px]">
@@ -88,10 +88,10 @@
:src="projectInfo.Thumbnail? projectInfo.Thumbnail : '../assets/images/backgrounds/cover_bg.png'"
alt=""
class="w-full mt-[20px]"
- style="height: calc(100% - 120px);"
+ style="height: calc(100% - 150px);"
>
</div>
- <div class="w-[100%] h-[15%]">
+ <div class="w-[100%] h-[18%]">
<!-- 参建单位 -->
<div
class="w-full h-[30px] mt-[20px] mb-[10px]"
@@ -172,7 +172,7 @@
<!-- 表格 -->
<div
- class="w-full min-h-[20vh] px-[8px] py-[10px]"
+ class="chartTable w-full h-[300px] px-[8px] py-[10px] overflow-y-auto"
:style="{
backgroundImage: `url(${tableImage})`,
backgroundRepeat: 'no-repeat',
@@ -221,7 +221,7 @@
bgImage: new URL('@/assets/images/titles/title_second.png', import.meta.url).href,
tableImage: new URL('@/assets/images/backgrounds/table_bg.png', import.meta.url).href,
projectInfo: {
- OrganizeName: '',
+ ProjectName: '',
Description: '',
Thumbnail: '',
endDate: ''
@@ -253,7 +253,8 @@
console.log(result);
if(result.SafeProductionEndDate && result.SafeProductionEndDate !== 'null') {
this.projectInfo.endDate = result.SafeProductionEndDate.substring(0, 10)
- this.projectInfo.OrganizeName = result.OrganizeName
+ this.$store.commit('common/setProjectEndDate', this.projectInfo.endDate)
+ this.projectInfo.ProjectName = result.ProjectName
this.projectInfo.Description = result.Description
this.projectInfo.Thumbnail = result.Thumbnail
}
@@ -380,6 +381,9 @@
}
.chart-container{
width: 100%;
- height: calc(40% - 180px);
+ height: calc(40% - 170px);
+ .chartTable{
+ height: calc(100% - 10px);
+ }
}
</style>
--
Gitblit v1.9.3