From d86f47d5e4257331bc7ebea60cd22dcd1f5d9fd7 Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期六, 24 一月 2026 10:29:02 +0800
Subject: [PATCH] 项目端首页权限优化

---
 screen/src/view/projectHome/index.vue |  141 ++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 108 insertions(+), 33 deletions(-)

diff --git a/screen/src/view/projectHome/index.vue b/screen/src/view/projectHome/index.vue
index 28d3f7f..4d26728 100644
--- a/screen/src/view/projectHome/index.vue
+++ b/screen/src/view/projectHome/index.vue
@@ -80,7 +80,7 @@
           </template>
         </TitleBox>
       </div>
-      <div class="mt--30" @click="toEquipmentInfo">
+      <div class="mt--30" @click="toEquipmentInfo" v-if="permissionProject.includes('3')">
         <TitleBox>
           <template #title> 设备信息 </template>
           <template #content>
@@ -105,7 +105,7 @@
           </template>
         </TitleBox>
       </div>
-      <div class="mt--30">
+      <div class="mt--30" v-if="permissionProject.includes('1')">
         <TitleBox>
           <template #title>各分项隐患趋势 </template>
           <template #right>
@@ -166,7 +166,7 @@
     </div>
     <!-- 中间内容 -->
     <div class="mid-card">
-      <div @click="toHiddenDanger(1)" class="mid-info">
+      <div @click="toHiddenDanger(1)" class="mid-info" v-if="permissionProject.includes('2')">
         <div class="flex a--center">
           <div @click.stop="toHiddenDanger(2)" class="mid-title">隐患数量</div>
           <div class="flex a--center tab-border">
@@ -191,11 +191,11 @@
           </div>
         </div>
       </div>
-      <div @click="toPlanOfAudit" class="mid-more">查看报告</div>
+      <div v-if="permissionProject.includes('4')" @click="toPlanOfAudit" class="mid-more">查看报告</div>
     </div>
     <!-- 右边 -->
     <div class="right-card">
-      <div class="mt--16">
+      <div class="mt--16" v-if="permissionProject.includes('5')">
         <TitleBox>
           <template #title>人员在岗率 </template>
           <template #right>
@@ -237,7 +237,7 @@
           </template>
         </TitleBox>
       </div>
-      <div class="mt--30">
+      <div class="mt--30" v-if="permissionProject.includes('6')">
         <TitleBox>
           <template #title>重大风险源 </template>
           <template #right>
@@ -277,7 +277,7 @@
           </template>
         </TitleBox>
       </div>
-      <div class="mt--30">
+      <div class="mt--30" v-if="permissionProject.includes('7')">
         <TitleBox>
           <template #title>项目风险趋势 </template>
           <template #right>
@@ -333,8 +333,19 @@
       projectId: '',
       projectName: '',
       // 项目详情信息
-      projectInfo: {},//项目信息
-      dangerCount: {},//危险源统计
+      projectInfo: {
+        addressInfo: {},
+        address: '',
+        constructionCompanyInfo: {},
+        developmentCompanyInfo: {},
+        supervisorCompanyInfo: {},
+        properties: []
+      },//项目信息
+      dangerCount: {
+        serious: 0,
+        rectified: 0,
+        unRectified: 0
+      },//危险源统计
       deviceTypeList: [],//设备类型列表
       equipment: 0,//设备数量
       peopleList: [],//人员列表
@@ -346,18 +357,14 @@
       dangerSortType: 1, // 排序类型:1-隐患数量,2-趋势
       dangerSortDesc: true, // 是否倒序
       // 风险源数据
-      riskSourceData: [
-        { riskScale: '一般', content: '项目风险源内容1', status: '未开始' },
-        { riskScale: '一般', content: '项目风险源内容2', status: '进行中' },
-        { riskScale: '一般', content: '项目风险源内容3', status: '已完成' },
-        { riskScale: '重大', content: '项目风险源内容4', status: '未开始' },
-        { riskScale: '重大', content: '项目风险源内容5', status: '进行中' },
-      ],
+      riskSourceData: [],
       // 项目风险趋势数据
       riskTrendData: {
         xAxisData: [],
         seriesData: []
-      }
+      },
+      // 9各分项隐患趋势 10隐患数量 11设备数量 12查看报告入口 13人员在岗率 14重大风险源 15 项目风险趋势
+      permissionProject: JSON.parse(localStorage.getItem("permissionProject")) || [],
     };
   },
   computed: {
@@ -429,10 +436,19 @@
     });
     if (this.$route.query.projectId) {
       this.projectId = this.$route.query.projectId || ''
+      // 添加错误处理,确保登录信息获取失败不影响其他模块
       getLoginInfo({ id: this.projectId, type: 2 }).then(res => {
         console.log('res', res)
         this.projectName = res.name
+        const permissions = res.permissionProject ? res.permissionProject.split(",") : []
+        this.permissionProject =['1','2','3','4','5','6','7']|| permissions
+        localStorage.setItem( "permissionProject", JSON.stringify(permissions));
         localStorage.setItem('commentType', res.commentType)
+      }).catch(err => {
+        console.error('获取登录信息失败:', err)
+        // 设置默认值,确保页面可以继续渲染
+        this.projectName = '项目详情'
+        this.permissionProject = []
       })
       this.getDetail()
       this.getDangerTrendList()
@@ -450,46 +466,85 @@
   methods: {
     // 获取项目详情
     getDetail() {
-      // 设备类型
+      // 设备类型 - 添加错误处理
       deviceTypes().then(res => {
         this.deviceTypeList = res
+      }).catch(err => {
+        console.error('获取设备类型失败:', err)
+        this.deviceTypeList = []
       })
-      // 获取项目详情
+
+      // 获取项目详情 - 添加错误处理
       getProjectDetail(this.projectId).then(res => {
+        const addressInfo = res.addressInfo ? JSON.parse(res.addressInfo) : {}
+        const constructionCompanyInfo = res.constructionCompanyInfo ? JSON.parse(res.constructionCompanyInfo) : {}
+        const developmentCompanyInfo = res.developmentCompanyInfo ? JSON.parse(res.developmentCompanyInfo) : {}
+        const supervisorCompanyInfo = res.supervisorCompanyInfo ? JSON.parse(res.supervisorCompanyInfo) : {}
+
         this.projectInfo = {
           ...res,
-          addressInfo: JSON.parse(res.addressInfo),
-          address: JSON.parse(res.addressInfo).province + JSON.parse(res.addressInfo).city + JSON.parse(res.addressInfo).district + JSON.parse(res.addressInfo).detail,
-          constructionCompanyInfo: JSON.parse(res.constructionCompanyInfo),
-          developmentCompanyInfo: JSON.parse(res.developmentCompanyInfo),
-          supervisorCompanyInfo: JSON.parse(res.supervisorCompanyInfo),
+          addressInfo: addressInfo,
+          address: (addressInfo.province || '') + (addressInfo.city || '') + (addressInfo.district || '') + (addressInfo.detail || ''),
+          constructionCompanyInfo: constructionCompanyInfo,
+          developmentCompanyInfo: developmentCompanyInfo,
+          supervisorCompanyInfo: supervisorCompanyInfo,
         }
         console.log('projectInfo projectInfo', this.projectInfo)
+      }).catch(err => {
+        console.error('获取项目详情失败:', err)
+        // 设置默认值
+        this.projectInfo = {
+          addressInfo: {},
+          address: '',
+          constructionCompanyInfo: {},
+          developmentCompanyInfo: {},
+          supervisorCompanyInfo: {},
+          properties: []
+        }
       })
-      // 设备数量
+
+      // 设备数量 - 添加错误处理
       getProjectDeviceCount(this.projectId).then(res => {
         this.equipment = 0
         this.legendData = res.map(item => {
           this.equipment += item.count
+          const deviceType = this.deviceTypeList[item.type]
           return {
             ...item,
             value: item.count || 0,
-            name: this.deviceTypeList[item.type].name,
+            name: deviceType && deviceType.name ? deviceType.name : '未知设备',
             itemStyle: { color: this.generateRandomColor() }
           }
         })
         this.initPie3D()
+      }).catch(err => {
+        console.error('获取设备数量失败:', err)
+        this.equipment = 0
+        this.legendData = []
       })
-      // 隐患数量
+
+      // 隐患数量 - 添加错误处理
       getDangerCount(this.projectId).then(res => {
         this.dangerCount = res
         console.log('getDangerCount getDangerCount', res)
+      }).catch(err => {
+        console.error('获取隐患数量失败:', err)
+        this.dangerCount = {
+          serious: 0,
+          rectified: 0,
+          unRectified: 0
+        }
       })
-      // 项目人员信息
+
+      // 项目人员信息 - 添加错误处理
       getProjectPersonInfo({ projectId: this.projectId }).then(res => {
-        this.peopleList = res
+        this.peopleList = res || []
+      }).catch(err => {
+        console.error('获取人员信息失败:', err)
+        this.peopleList = []
       })
-      // 获取项目风险源
+
+      // 获取项目风险源 - 添加错误处理
       getProjectSource({ projectId: this.projectId }).then(res => {
         const riskSourceList = []
 
@@ -527,6 +582,9 @@
         }
 
         this.riskSourceData = riskSourceList
+      }).catch(err => {
+        console.error('获取项目风险源失败:', err)
+        this.riskSourceData = []
       })
     },
     // 获取隐患趋势
@@ -538,6 +596,9 @@
       }
       getDangerTrend(params).then(res => {
         this.dangerTrendList = res || []
+      }).catch(err => {
+        console.error('获取隐患趋势失败:', err)
+        this.dangerTrendList = []
       })
     },
     // 切换隐患排序方式
@@ -1125,13 +1186,22 @@
           this.updateRiskChart();
         }
       } catch (error) {
-        console.error('获取项目风险趋势失败:', error);
+        console.error('获取项目风险趋势失败:', error)
+        // 设置默认值,确保图表可以正常显示
+        this.riskTrendData.xAxisData = []
+        this.riskTrendData.seriesData = []
       }
     },
     // 更新风险趋势图表
     updateRiskChart() {
-      const riskChart = echarts.getInstanceByDom(document.getElementById('riskTrendChart'));
+      const chartDom = document.getElementById('riskTrendChart');
+      if (!chartDom) {
+        console.warn('风险趋势图表DOM不存在,可能是权限限制导致该模块未渲染');
+        return;
+      }
+      const riskChart = echarts.getInstanceByDom(chartDom);
       if (!riskChart) {
+        console.warn('风险趋势图表实例不存在');
         return;
       }
 
@@ -1276,7 +1346,12 @@
     },
     // 初始化折线图
     initRiskChart() {
-      const riskChart = echarts.init(document.getElementById('riskTrendChart'))
+      const chartDom = document.getElementById('riskTrendChart');
+      if (!chartDom) {
+        console.warn('风险趋势图表DOM不存在,可能是权限限制导致该模块未渲染');
+        return;
+      }
+      const riskChart = echarts.init(chartDom)
 
       // 文本换行处理函数
       const formatLabel = (text, maxWidth = 4) => {

--
Gitblit v1.7.1