ソースを参照

Merge branch 'VERSIONS-AppUp' into VERSIONS-AnQuanJianCha-1223

dedsudiyu 3 ヶ月 前
コミット
8b08ba8e27
共有31 個のファイルを変更した898 個の追加51 個の削除を含む
  1. 1 3
      .env.production
  2. 12 1
      README.md
  3. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqjcgl.png
  4. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqjyks.png
  5. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqzrgl.png
  6. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_dygxyy.png
  7. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_hxpzngk.png
  8. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_jcjggl.png
  9. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sbzhgl.png
  10. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sydwzx.png
  11. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sysaqzr.png
  12. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sysfjfl.png
  13. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_syszyyy.png
  14. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_yjyjgl.png
  15. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_zcglxt.png
  16. BIN
      src/assets/ZDimages/basicsModules/homeXiNong/icon_sydlpt_sjksh.png
  17. BIN
      src/assets/ZDimages/chemicalManage/chemicalsStatistics_1.png
  18. BIN
      src/assets/ZDimages/chemicalManage/chemicalsStatistics_2.png
  19. BIN
      src/assets/ZDimages/chemicalManage/chemicalsStatistics_3.png
  20. 8 1
      src/router/index.js
  21. 727 0
      src/views/basicsModules/homeXiNong.vue
  22. 69 23
      src/views/chemicalManage/chemicalsStatistics/index.vue
  23. 17 8
      src/views/emergencyManagement/plan/associatedPage.vue
  24. 12 1
      src/views/iotDevice/appManage/applyList/index.vue
  25. 9 1
      src/views/iotDevice/appManage/applyListVersions/index.vue
  26. 3 0
      src/views/iotDevice/appManage/applyUpgrades/index.vue
  27. 3 0
      src/views/iotDevice/appManage/applyUpgradesQuest/index.vue
  28. 8 7
      src/views/safetyCheck/components/initiateInspect/initiateInspect.vue
  29. 7 2
      src/views/safetyCheck/components/noticeDom.vue
  30. 12 3
      src/views/safetyCheck/safetyHazard/rectificationNotice/index.vue
  31. 10 1
      src/views/safetyCheck/safetyHazard/rectificationReport/index.vue

+ 1 - 3
.env.production

@@ -16,9 +16,7 @@ VUE_APP_RENEWAL_ENCODING = ''
 
 # ####################版本差异字段####################
 
-VUE_APP_VERSION_DIFFERENCE_FIELD = 'kuangYeDaXue_nanHu'
-# VUE_APP_VERSION_DIFFERENCE_FIELD = 'suZhouDaXue'
-# VUE_APP_VERSION_DIFFERENCE_FIELD = 'xiBeiNongLinDaXue'
+VUE_APP_VERSION_DIFFERENCE_FIELD = 'xiBeiNongLinDaXue'
 
 # ####################外网接口配置####################
 

+ 12 - 1
README.md

@@ -127,7 +127,7 @@
     
 ## 六.版本相关
 
-### 1.版本差异字段
+### 1.版本差异字段 VUE_APP_VERSION_DIFFERENCE_FIELD
 >##### 配置文件在 .env.development 与 .env.production 文件内
 
     ├─src
@@ -135,6 +135,17 @@
     │  └─.env.production          (打包配置)
 
 
+### 当前差异内容
+
+>#### 一.非配置化内容 
+>##### ① 首页配置 西农使用定制化首页 其他学校部署使用后台配置首页
+>##### router/index.js 下homeXiNong为定制化西农首页home为后台配置首页
+
+>#### 二.配置化内容
+>##### 所有配置化内容使用VUE_APP_VERSION_DIFFERENCE_FIELD 字段控制
+>##### ① 西农配置 VUE_APP_VERSION_DIFFERENCE_FIELD = 'xiBeiNongLinDaXue'
+>###### 化学品首页 chemicalManage/chemicalsStatistics
+
 ### 2.版本分支关系
 >##### 修改时务必注意版本分支关系,从底层开始迭代
 

BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqjcgl.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqjyks.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqzrgl.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_dygxyy.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_hxpzngk.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_jcjggl.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sbzhgl.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sydwzx.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sysaqzr.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sysfjfl.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_syszyyy.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_yjyjgl.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sy_zcglxt.png


BIN
src/assets/ZDimages/basicsModules/homeXiNong/icon_sydlpt_sjksh.png


BIN
src/assets/ZDimages/chemicalManage/chemicalsStatistics_1.png


BIN
src/assets/ZDimages/chemicalManage/chemicalsStatistics_2.png


BIN
src/assets/ZDimages/chemicalManage/chemicalsStatistics_3.png


+ 8 - 1
src/router/index.js

@@ -46,9 +46,16 @@ export const constantRoutes = [
     component: (resolve) => require(['@/views/basicsModules/login.vue'], resolve),
     hidden: true
   },
+  //公共版本
+  // {
+  //   path: '/home',
+  //   component: (resolve) => require(['@/views/basicsModules/home'], resolve),
+  //   hidden: true
+  // },
+  //西农版本
   {
     path: '/home',
-    component: (resolve) => require(['@/views/basicsModules/home'], resolve),
+    component: (resolve) => require(['@/views/basicsModules/homeXiNong.vue'], resolve),
     hidden: true
   },
   {

+ 727 - 0
src/views/basicsModules/homeXiNong.vue

@@ -0,0 +1,727 @@
+<template>
+  <div class="homeXiNong" :class="userType != 22&&initPage ? 'home-class' : ''">
+    <home-navbar/>
+    <div class="max-big-home-box" v-if="userType != 22&&initPage">
+      <div class="max-home-button-box">
+        <div class="max-home-box">
+          <div class="max-bottom-box">
+            <div class="top-button-box">
+              <div class="left-box">
+                <div class="position-button"
+                     v-for="(item,index) in leftButtonData" @click="goPage(item)">
+                  <div>
+                    <img :src="item.imgUrl">
+                  </div>
+                </div>
+              </div>
+              <div class="center-box">
+                <div class="position-button"
+                     style="cursor: auto"
+                     v-for="(item,index) in centerButtonList">
+                  <div>
+                    <img :src="item.imgUrl">
+                  </div>
+                </div>
+              </div>
+              <div class="right-box">
+                <div class="position-button"
+                     v-for="(item,index) in rightButtonData" @click="goPage(item)">
+                  <div>
+                    <img :src="item.imgUrl">
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div class="center-button-box display-none-one"></div>
+            <div class="bottom-button-box">
+              <div class="null-button"></div>
+              <div class="position-button"
+                   v-for="(item,index) in buttonButtonData" @click="goPage(item)">
+                <div>
+                  <img :src="item.imgUrl">
+                </div>
+              </div>
+              <div class="null-button"></div>
+            </div>
+          </div>
+          <img class="img-1" src="@/assets/ZDimages/basicsModules/img_sy_lf.png">
+          <img class="img-2" src="@/assets/ZDimages/basicsModules/img_yh_db.png">
+          <img class="img-3" src="@/assets/ZDimages/basicsModules/img_yh_zj.png">
+          <img class="img-4" src="@/assets/ZDimages/basicsModules/img_yh_dd.png">
+          <img class="img-5" src="@/assets/ZDimages/basicsModules/img_yh_zj.png">
+          <img class="img-6" src="@/assets/ZDimages/basicsModules/img_yh_db.png">
+        </div>
+      </div>
+    </div>
+    <backAnimation v-if="userType != '22'&&initPage"></backAnimation>
+  </div>
+</template>
+
+<script>
+  import store from '@/store'
+  import router from '@/router'
+  import backAnimation from './components/backAnimation'
+  import homeNavbar from './components/homeNavbar.vue'
+  import { xmlRequestLink } from '@/utils/menuLink'
+
+  export default {
+    name: 'home',
+    components: {
+      homeNavbar,
+      backAnimation
+    },
+    data() {
+      return {
+        userType: localStorage.getItem('userType'),
+        initPage: JSON.parse(localStorage.getItem('initPage')),
+        homeConfigData: JSON.parse(localStorage.getItem('homeConfig')),
+        routeData: JSON.parse(localStorage.getItem('routeData')),
+        leftButtonData: [
+          {
+            buttonType: true,
+            buttonName: '安全教育与考试',
+            menuName: '安全教育与考试',
+            isFrame: true,
+            path: 'aqjyyks',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqjyks.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '实验室安全准入',
+            menuName: '实验室安全准入',
+            isFrame: false,
+            path: 'secureAccess',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sysaqzr.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '化学品智能管控',
+            menuName: '化学品智能管控',
+            isFrame: false,
+            path: 'chemicalManage',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_hxpzngk.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '设备综合管理',
+            menuName: '设备综合管理',
+            isFrame: true,
+            path: 'shebeizichan',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sbzhgl.png'),
+          },
+        ],
+        rightButtonData: [
+          {
+            buttonType: true,
+            buttonName: '安全检查管理',
+            menuName: '安全检查管理',
+            isFrame: false,
+            path: 'safetyCheck',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqjcgl.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '实验室分级分类',
+            menuName: '实验室分级分类',
+            isFrame: false,
+            path: 'hierarchicalControl',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sysfjfl.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '实验动物中心',
+            menuName: '实验动物中心',
+            isFrame: true,
+            path: 'longweiguanli',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_sydwzx.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '实验资源预约',
+            menuName: '实验资源预约',
+            isFrame: true,
+            path: 'shiyanziyuanyuyue',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_syszyyy.png'),
+          },
+        ],
+        centerButtonList:[
+          {
+            buttonType: true,
+            buttonName: '大仪共享预约',
+            menuName: '大仪共享预约',
+            isFrame: true,
+            path: 'dayigongxiangyuyue',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sydlpt_sjksh.png'),
+          },
+        ],
+        buttonButtonData: [
+          {
+            buttonType: true,
+            buttonName: '大仪共享预约',
+            menuName: '大仪共享预约',
+            isFrame: true,
+            path: 'dayigongxiangyuyue',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_dygxyy.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '资产管理系统',
+            menuName: '资产管理系统',
+            isFrame: true,
+            path: 'zichanguanlixitong',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_zcglxt.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '安全责任管理',
+            menuName: '安全责任管理',
+            isFrame: true,
+            path: 'anquanzeren',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_aqzrgl.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '应急预警管理',
+            menuName: '应急预警管理',
+            isFrame: false,
+            path: 'emergencyManagement',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_yjyjgl.png'),
+          },
+          {
+            buttonType: true,
+            buttonName: '基础结构管理',
+            menuName: '基础结构管理',
+            isFrame: false,
+            path: 'integratedManagement',
+            imgUrl: require('@/assets/ZDimages/basicsModules/homeXiNong/icon_sy_jcjggl.png'),
+          },
+        ]
+      }
+    },
+    created() {
+
+    },
+    mounted() {
+      if (this.initPage) {
+        //开启首页时-学生自动跳转-老师留在首页
+        if (this.userType == '2') {
+          this.autoSkip()
+        }
+      } else {
+        //关闭首页时
+        if (this.userType == '2') {
+          if (this.homeConfigData.studentsSkip) {
+            //开启了指定页面跳转
+            this.appointSkip()
+          } else {
+            //自动跳转
+            this.autoSkip()
+          }
+        } else {
+          if (this.homeConfigData.teacherSkip) {
+            //开启了指定页面跳转
+            this.appointSkip()
+          } else {
+            //自动跳转
+            this.autoSkip()
+          }
+        }
+      }
+    },
+    methods: {
+      //跳转按钮
+      goPage(item) {
+        if (item.buttonType) {
+          let path = this.circularCallNameSkip(item.path, this.routeData, false)
+          if (path) {
+            if (item.isFrame) {
+              xmlRequestLink(path)
+            } else {
+              this.$router.push({ path: path })
+            }
+          } else {
+            this.$alert('没有"' + item.menuName + '"系统权限,如有疑问,请联系管理员', {
+              confirmButtonText: '确定',
+              callback: action => {
+              }
+            })
+          }
+        } else {
+          this.$alert(item.buttonName + '暂未开放', {
+            confirmButtonText: '确定',
+            callback: action => {
+            }
+          })
+        }
+      },
+      //自动跳转
+      autoSkip() {
+        let path = this.circularCallSortSkip(this.routeData)
+        if (path) {
+          this.$router.push({ path: path })
+        } else {
+          this.outLogin()
+        }
+      },
+      //指定跳转
+      appointSkip() {
+        if (this.userType == '2') {
+          //学生
+          let path = this.circularCallIdSkip(this.homeConfigData.studentsSkipMenuId, this.routeData)
+          if (path) {
+            this.$router.push({ path: path })
+          } else {
+            this.outLogin()
+          }
+        } else if (this.userType == '1') {
+          //老师
+          let path = this.circularCallIdSkip(this.homeConfigData.teacherSkipMenuId, this.routeData)
+          if (path) {
+            this.$router.push({ path: path })
+          } else {
+            this.outLogin()
+          }
+        }
+      },
+      //循环调用 按照排序跳转
+      circularCallSortSkip(list) {
+        let self = this
+        for (let i = 0; i < list.length; i++) {
+          if (list[i].children) {
+            let text = self.circularCallSortSkip(list[i].children)
+            if (text) {
+              return list[i].path + '/' + text
+            }
+          } else if (!list[i].alwaysShow && !list[i].hidden && !list[i].isFrame) {
+            return list[i].path
+          }
+        }
+      },
+      //循环调用 通过ID匹配跳转
+      circularCallIdSkip(skipMenuId, list) {
+        let self = this
+        for (let i = 0; i < list.length; i++) {
+          if (skipMenuId == list[i].menuId) {
+            return list[i].path
+          } else if (list[i].children) {
+            let text = self.circularCallIdSkip(skipMenuId, list[i].children)
+            if (text) {
+              return list[i].path + '/' + text
+            }
+          }
+        }
+      },
+      //循环调用 通过name匹配跳转
+      circularCallNameSkip(skipName, list, type) {
+        let self = this
+        for (let i = 0; i < list.length; i++) {
+          if (type) {
+            if (list[i].children) {
+              let text = self.circularCallNameSkip(skipName, list[i].children, true)
+              if (text) {
+                return list[i].path + '/' + text
+              }
+            } else if (!list[i].alwaysShow && !list[i].hidden) {
+              if (list[i].isFrame) {
+                return list[i]
+              } else {
+                return list[i].path
+              }
+            }
+          } else {
+            if (skipName == list[i].name) {
+              if (list[i].isFrame) {
+                return list[i]
+              } else if (list[i].children) {
+                let text = self.circularCallNameSkip(skipName, list[i].children, true)
+                if (text) {
+                  return list[i].path + '/' + text
+                }
+              }
+            }
+          }
+        }
+      },
+      //权限异常未匹配到相关权限页面 提示并退出
+      outLogin() {
+        this.$alert('没有相关权限,请联系管理员', {
+          confirmButtonText: '确定',
+          callback: action => {
+            store.dispatch('LogOutNoData').then(() => {
+              localStorage.removeItem('serviceType')
+              if (process.env.VUE_APP_LOGIN_TYPE === 'certification') {
+                window.location.href = process.env.VUE_APP_OUT_URL
+              } else {
+                router.replace({
+                  path: '/login'
+                })
+              }
+            })
+          }
+        })
+      }
+    }
+  }
+</script>
+
+<style scoped lang="scss">
+  @-webkit-keyframes centerButtonMover {
+    0% {
+      transform: scale(1);
+    }
+    30% {
+      transform: rotate(0deg) scale(0.9);
+    }
+    40% {
+      transform: rotate(-5deg) scale(1);
+    }
+    50% {
+      transform: rotate(5deg) scale(1);
+    }
+    60% {
+      transform: rotate(-5deg) scale(1.1);
+    }
+    70% {
+      transform: rotate(0deg) scale(1.2);
+    }
+    100% {
+      transform: rotate(0deg) scale(1);
+    }
+  }
+
+  @-webkit-keyframes centerMover {
+    0% {
+      -webkit-transform: translateY(0);
+    }
+    50% {
+      -webkit-transform: translateY(20px);
+    }
+    100% {
+      -webkit-transform: translateY(0);
+    }
+  }
+
+  @-webkit-keyframes ringMove {
+    0% {
+      -webkit-transform: translateY(0px);
+      opacity: 1;
+    }
+    50% {
+      -webkit-transform: translateY(20px);
+      opacity: 0;
+    }
+    100% {
+      -webkit-transform: translateY(0);
+      opacity: 0;
+    }
+  }
+
+  @-webkit-keyframes buttonMove {
+    50% {
+      -webkit-transform: scale(0.8);
+      transform: scale(0.8);
+      -webkit-filter: brightness(90%)
+    }
+    100% {
+      -webkit-transform: scale(1);
+      transform: scale(1);
+      -webkit-filter: brightness(100%)
+    }
+  }
+
+  .home-class {
+    background-color: #004d8c;
+    background-image: url("../../assets/ZDimages/basicsModules/img_tydlpt_bg.png") !important;
+    -webkit-background-size: 100%;
+    background-size: 100%;
+
+  }
+
+  .homeXiNong {
+    height: 100%;
+    width: 100%;
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+    position: relative;
+    * {
+      margin: 0;
+    }
+    .max-big-home-box {
+      position: relative;
+      flex: 1;
+      overflow: hidden;
+      .max-home-button-box {
+        /*width: 1300px;*/
+        /*height: 760px;*/
+        /*margin-top: -380px;*/
+        /*margin-left: -650px;*/
+        width: 1400px;
+        margin-left: -700px;
+        height: 800px;
+        margin-top: -400px;
+        top: 50%;
+        left: 50%;
+        position: absolute;
+        .max-home-box {
+          /*width: 1300px;*/
+          /*height: 760px;*/
+          width: 1400px;
+          height: 800px;
+          position: relative;
+          display: flex;
+          flex-direction: column;
+          .img-1 {
+            position: absolute;
+            /*width:863px;*/
+            width: 690px;
+            /*height:504px;*/
+            height: 403px;
+            top: 191px;
+            left: 50%;
+            margin-left: - 345px;
+            -webkit-animation-name: centerMover;
+            -webkit-animation-duration: 4s;
+            -webkit-animation-iteration-count: infinite;
+            -webkit-animation-delay: 0s;
+          }
+          .img-2 {
+            position: absolute;
+            /*width:463px;*/
+            width: 370px;
+            /*height:106px;*/
+            height: 84px;
+            top: 391px;
+            left: 50%;
+            margin-left: - 185px;
+            -webkit-animation-name: ringMove;
+            -webkit-animation-duration: 2s;
+            -webkit-animation-iteration-count: infinite;
+            -webkit-animation-delay: 0s;
+          }
+          .img-3 {
+            position: absolute;
+            /*width:493px;*/
+            width: 394px;
+            /*height:107px;*/
+            height: 85px;
+            top: 319px;
+            left: 50%;
+            margin-left: - 197px;
+            -webkit-animation-name: ringMove;
+            -webkit-animation-duration: 2s;
+            -webkit-animation-iteration-count: infinite;
+            -webkit-animation-delay: 0.2s;
+          }
+          .img-4 {
+            position: absolute;
+            /*width:554px;*/
+            width: 443px;
+            /*height:118px;*/
+            height: 94px;
+            top: 231px;
+            left: 50%;
+            margin-left: - 221px;
+            -webkit-animation-name: ringMove;
+            -webkit-animation-duration: 2s;
+            -webkit-animation-iteration-count: infinite;
+            -webkit-animation-delay: 0.4s;
+          }
+          .img-5 {
+            position: absolute;
+            width: 394px;
+            /*width:493px;*/
+            /*height:107px;*/
+            height: 85px;
+            /*width:644px;*/
+            /*height:118px;*/
+            top: 141px;
+            left: 50%;
+            //margin-left:-322px;
+            margin-left: - 197px;
+            -webkit-animation-name: ringMove;
+            -webkit-animation-duration: 2s;
+            -webkit-animation-iteration-count: infinite;
+            -webkit-animation-delay: 0.6s;
+          }
+          .img-6 {
+            position: absolute;
+            width: 354px;
+            /*width:443px;*/
+            /*height:106px;*/
+            height: 84px;
+            /*width:734px;*/
+            /*height:118px;*/
+            top: 051px;
+            left: 50%;
+            //margin-left:-367px;
+            margin-left: - 177px;
+            -webkit-animation-name: ringMove;
+            -webkit-animation-duration: 2s;
+            -webkit-animation-iteration-count: infinite;
+            -webkit-animation-delay: 0.8s;
+          }
+          .max-bottom-box {
+            width: 1400px;
+            margin: 0 auto;
+            flex: 1;
+            display: flex;
+            flex-direction: column;
+            .top-button-box {
+              display: flex;
+              .left-box {
+                .position-button {
+                  width: 297px;
+                  height: 136px;
+                  cursor: pointer;
+                  position: relative;
+                  z-index: 5;
+                  img {
+                    width: 297px;
+                    height: 136px;
+                  }
+                  p {
+                    position: absolute;
+                    top: 44px;
+                    left: 142px;
+                    text-align: center;
+                    font-size: 18px;
+                    line-height: 18px;
+                    background: linear-gradient(to top, #06F6F7, #FFFFFF);
+                    -webkit-background-clip: text;
+                    color: transparent;
+                  }
+                }
+                .position-button:nth-child(1) {
+                  margin-top: 0;
+                }
+                .position-button:nth-child(2) {
+                  margin: 15px 0 0 40px;
+                }
+                .position-button:nth-child(3) {
+                  margin: 15px 0 0 80px;
+                }
+                .position-button:nth-child(4) {
+                  margin: 15px 0 0 120px;
+                }
+              }
+              .center-box {
+                flex: 1;
+                .position-button {
+                  width: 147px;
+                  height: 105px;
+                  cursor: pointer;
+                  position: relative;
+                  z-index: 5;
+                  margin: 0 auto 0;
+                  -webkit-animation-name: centerButtonMover;
+                  -webkit-animation-duration: 3s;
+                  -webkit-animation-iteration-count: infinite;
+                  -webkit-animation-delay: 0s;
+                  img {
+                    width: 147px;
+                    height: 105px;
+                  }
+                  p {
+                    position: absolute;
+                    top: 66px;
+                    left: 30px;
+                    text-align: center;
+                    font-size: 18px;
+                    line-height: 18px;
+                    background: linear-gradient(to top, #06F6F7, #FFFFFF);
+                    -webkit-background-clip: text;
+                    color: transparent;
+                  }
+                }
+              }
+              .right-box {
+                .position-button {
+                  width: 297px;
+                  height: 136px;
+                  cursor: pointer;
+                  z-index: 5;
+                  position: relative;
+                  img {
+                    width: 297px;
+                    height: 136px;
+                  }
+                  p {
+                    position: absolute;
+                    top: 44px;
+                    left: 40px;
+                    text-align: center;
+                    font-size: 18px;
+                    line-height: 18px;
+                    background: linear-gradient(to top, #06F6F7, #FFFFFF);
+                    -webkit-background-clip: text;
+                    color: transparent;
+                  }
+                }
+                .position-button:nth-child(1) {
+                  margin: 0 0 0 120px;
+                }
+                .position-button:nth-child(2) {
+                  margin: 15px 0 0 80px;
+                }
+                .position-button:nth-child(3) {
+                  margin: 15px 0 0 40px;
+                }
+                .position-button:nth-child(4) {
+                  margin-top: 15px;
+                }
+              }
+            }
+            .center-button-box {
+              flex: 1;
+            }
+            .bottom-button-box {
+              display: flex;
+              .null-button {
+                flex: 1;
+              }
+              .position-button {
+                width: 140px;
+                height: 200px;
+                cursor: pointer;
+                z-index: 5;
+                position: relative;
+                margin-right: 95px;
+                img {
+                  width: 140px;
+                  height: 230px;
+                }
+                p {
+                  position: absolute;
+                  top: 154px;
+                  /*left:34px;*/
+                  width: 140px;
+                  text-align: center;
+                  font-size: 18px;
+                  line-height: 18px;
+                  background: linear-gradient(to top, #06F6F7, #FFFFFF);
+                  -webkit-background-clip: text;
+                  color: transparent;
+                }
+              }
+              .position-button:nth-last-child(2) {
+                margin-right: 0;
+              }
+            }
+            .position-button:hover {
+              -webkit-animation-name: buttonMove;
+              -webkit-animation-duration: 1.5s;
+              -webkit-animation-iteration-count: infinite;
+              -webkit-animation-delay: 0s;
+            }
+          }
+        }
+      }
+    }
+    .bottom-null-box {
+      height: 60px;
+    }
+  }
+</style>
+

+ 69 - 23
src/views/chemicalManage/chemicalsStatistics/index.vue

@@ -1,28 +1,42 @@
 <!--化学品首页-->
 <template>
   <div class="app-container chemicalsStatistics">
-    <div class="top-max-big-box">
-      <div class="img-box">
-        <img src="@/assets/ZDimages/chemicalManage/icon_sy_hxpg.png">
-        <div>
-          <p>化学品柜</p>
-          <p class="colorA">{{inventoryData.cabinetNum}}</p>
-        </div>
+    <div class="top-max-max-big-box">
+      <div class="button-big-box" @click="goPage(1)" v-if="versionField() == 'xiBeiNongLinDaXue'">
+        <img src="@/assets/ZDimages/chemicalManage/chemicalsStatistics_1.png">
+        <p>实验室库存管理</p>
       </div>
-      <p class="null-p"></p>
-      <div class="img-box">
-        <img src="@/assets/ZDimages/chemicalManage/icon_sy_hxpkysl.png">
-        <div>
-          <p>待入库</p>
-          <p class="colorB">{{inventoryData.stockWaitNum}}</p>
-        </div>
+      <div class="button-big-box" @click="goPage(2)" v-if="versionField() == 'xiBeiNongLinDaXue'">
+        <img src="@/assets/ZDimages/chemicalManage/chemicalsStatistics_2.png">
+        <p>危化品申购申领</p>
       </div>
-      <p class="null-p"></p>
-      <div class="img-box">
-        <img src="@/assets/ZDimages/chemicalManage/icon_sy_hxpyjsl.png">
-        <div>
-          <p>待归还</p>
-          <p class="colorC">{{inventoryData.giveBackNum}}</p>
+      <div class="button-big-box" @click="goPage(3)" v-if="versionField() == 'xiBeiNongLinDaXue'">
+        <img src="@/assets/ZDimages/chemicalManage/chemicalsStatistics_3.png">
+        <p>危废回收报备</p>
+      </div>
+      <div class="top-max-big-box">
+        <div class="img-box">
+          <img src="@/assets/ZDimages/chemicalManage/icon_sy_hxpg.png">
+          <div>
+            <p>化学品柜</p>
+            <p class="colorA">{{inventoryData.cabinetNum}}</p>
+          </div>
+        </div>
+        <p class="null-p"></p>
+        <div class="img-box">
+          <img src="@/assets/ZDimages/chemicalManage/icon_sy_hxpkysl.png">
+          <div>
+            <p>待入库</p>
+            <p class="colorB">{{inventoryData.stockWaitNum}}</p>
+          </div>
+        </div>
+        <p class="null-p"></p>
+        <div class="img-box">
+          <img src="@/assets/ZDimages/chemicalManage/icon_sy_hxpyjsl.png">
+          <div>
+            <p>待归还</p>
+            <p class="colorC">{{inventoryData.giveBackNum}}</p>
+          </div>
         </div>
       </div>
     </div>
@@ -73,6 +87,13 @@
       this.chemicalIndexTypeGroup();
     },
     methods:{
+      goPage(type){
+        if (type == 1){
+          this.$router.push({ path: '/chemicalManage/inventoryManagement/inventoryStatistics'});
+        } else {
+          window.open('https://chemcenter.nwafu.edu.cn/','_blank');
+        }
+      },
       chemicalIndexTypeGroup(){
         chemicalIndexTypeGroup().then(response => {
           this.$set(this,'inventoryData',response.data);
@@ -83,7 +104,32 @@
 </script>
 <style scoped lang="scss">
   .chemicalsStatistics{
+    .top-max-max-big-box{
+      display: flex;
+      .button-big-box{
+        width:225px;
+        height:120px;
+        display: flex;
+        flex-direction: column;
+        margin:20px 0 10px 20px;
+        box-shadow: 0 4px 10px 0 rgba(0,0,0,0.1);
+        border-radius: 10px;
+        cursor: pointer;
+        img{
+          margin:13px auto 0;
+          height:60px;
+          width:60px;
+        }
+        p{
+          font-size:18px;
+          line-height:40px;
+          text-align: center;
+        }
+      }
+    }
     .top-max-big-box{
+      flex:1;
+      height:120px;
       margin:20px 20px 10px;
       box-shadow: 0 4px 10px 0 rgba(0,0,0,0.1);
       border-radius: 10px;
@@ -92,9 +138,9 @@
         flex:1;
         display: flex;
         img{
-          margin:26px 30px 0 170px;
-          width: 68px;
-          height:68px;
+          margin:30px 30px 0 45px;
+          height:60px;
+          width:60px;
         }
         div{
           p:nth-child(1){

+ 17 - 8
src/views/emergencyManagement/plan/associatedPage.vue

@@ -94,7 +94,7 @@
           <template slot-scope="scope">
             <div class="table-button-box">
               <p class="table-button-null"></p>
-              <p class="table-button-p" v-if="scope.row.adminId == meUserId" @click="handleDelete(scope.row)">移除</p>
+              <p class="table-button-p" v-if="scope.row.adminId == meUserId || adminType" @click="handleDelete(scope.row)">移除</p>
               <p class="table-button-null"></p>
             </div>
           </template>
@@ -272,7 +272,7 @@
           typeId:'',
           levelId:'',
         },
-        dialogTotal: 5,
+        dialogTotal: 0,
         //关联实验室
         dialogAssociatedOpen: false,
         dialogTableData: [],
@@ -285,9 +285,12 @@
         allNum: 0,
         /***** 当前用户userId *****/
         meUserId:localStorage.getItem('userId'),
+        adminType:false,
       }
     },
     created() {
+      let userType = JSON.parse(localStorage.getItem('user')).userType
+      this.$set(this,'adminType',userType==0?true:false)
       // this.getListAll();
     },
     mounted() {
@@ -345,13 +348,19 @@
               })
               newList.push(obj);
             }else{
-              nullNum++
-              this.msgError(item.subName+'未配置危险源')
+              let obj = {
+                riskPlanId:this.associationData.id,
+                subId:item.subId,
+                hazardSensorRelationBos:[],
+              }
+              newList.push(obj);
+              // nullNum++
+              // this.msgError(item.subName+'未配置危险源')
             }
           })
-          if(nullNum != 0){
-            return
-          }
+          // if(nullNum != 0){
+          //   return
+          // }
           laboratoryRiskPlanSubjectRelationBatchRelationSub(newList).then(response => {
             self.msgSuccess(response.message)
             self.resetQuery()
@@ -517,7 +526,7 @@
             item.buttonList = [];
           })
           this.$set(this, 'dialogTableData', response.data.records)
-          this.$set(this, 'total', response.data.total)
+          this.$set(this, 'dialogTotal', response.data.total)
           this.$set(this, 'loading', false)
         })
       },

+ 12 - 1
src/views/iotDevice/appManage/applyList/index.vue

@@ -18,6 +18,9 @@
               <el-option label="化学品终端" value="aio_chemical"></el-option>
               <el-option label="电子信息牌" value="aio_infobord"></el-option>
               <el-option label="学习考试一体" value="aio_exam"></el-option>
+              <el-option label="化学品终端升级APP" value="aio_chemical_update"></el-option>
+              <el-option label="电子信息牌升级APP" value="aio_infobord_update"></el-option>
+              <el-option label="学习考试一体升级APP" value="aio_exam_update"></el-option>
             </el-select>
           </el-form-item>
           <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
@@ -33,7 +36,12 @@
           <el-table-column label="应用名" align="center" prop="appName" show-overflow-tooltip/>
           <el-table-column label="类型" align="center" prop="terminalType" show-overflow-tooltip width="200">
             <template slot-scope="scope">
-              {{scope.row.terminalType=='aio_chemical'?'化学品终端':(scope.row.terminalType=='aio_infobord'?'电子信息牌':(scope.row.terminalType=='aio_exam'?'学习考试一体':scope.row.terminalType))}}
+              {{scope.row.terminalType=='aio_chemical'?'化学品终端':(
+              scope.row.terminalType=='aio_infobord'?'电子信息牌':(
+              scope.row.terminalType=='aio_exam'?'学习考试一体':(
+              scope.row.terminalType=='aio_chemical_update'?'化学品终端升级APP':(
+              scope.row.terminalType=='aio_infobord_update'?'电子信息牌升级APP':(
+              scope.row.terminalType=='aio_exam_update'?'学习考试一体升级APP':scope.row.terminalType)))))}}
             </template>
           </el-table-column>
           <el-table-column label="描述" align="center" prop="description" show-overflow-tooltip width="600"/>
@@ -91,6 +99,9 @@
               <el-option label="化学品终端" value="aio_chemical"></el-option>
               <el-option label="电子信息牌" value="aio_infobord"></el-option>
               <el-option label="学习考试一体" value="aio_exam"></el-option>
+              <el-option label="化学品终端升级APP" value="aio_chemical_update"></el-option>
+              <el-option label="电子信息牌升级APP" value="aio_infobord_update"></el-option>
+              <el-option label="学习考试一体升级APP" value="aio_exam_update"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="描述" prop="description" label-width="90px">

+ 9 - 1
src/views/iotDevice/appManage/applyListVersions/index.vue

@@ -26,6 +26,9 @@
               <el-option label="化学品终端" value="aio_chemical"></el-option>
               <el-option label="电子信息牌" value="aio_infobord"></el-option>
               <el-option label="学习考试一体" value="aio_exam"></el-option>
+              <el-option label="化学品终端升级APP" value="aio_chemical_update"></el-option>
+              <el-option label="电子信息牌升级APP" value="aio_infobord_update"></el-option>
+              <el-option label="学习考试一体升级APP" value="aio_exam_update"></el-option>
             </el-select>
           </el-form-item>
           <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
@@ -44,7 +47,12 @@
           <el-table-column label="版本名称" prop="versionName" width="140" show-overflow-tooltip/>
           <el-table-column label="类型" align="center" prop="terminalType" show-overflow-tooltip width="200">
             <template slot-scope="scope">
-              {{scope.row.terminalType=='aio_chemical'?'化学品终端':(scope.row.terminalType=='aio_infobord'?'电子信息牌':(scope.row.terminalType=='aio_exam'?'学习考试一体':scope.row.terminalType))}}
+              {{scope.row.terminalType=='aio_chemical'?'化学品终端':(
+              scope.row.terminalType=='aio_infobord'?'电子信息牌':(
+              scope.row.terminalType=='aio_exam'?'学习考试一体':(
+              scope.row.terminalType=='aio_chemical_update'?'化学品终端升级APP':(
+              scope.row.terminalType=='aio_infobord_update'?'电子信息牌升级APP':(
+              scope.row.terminalType=='aio_exam_update'?'学习考试一体升级APP':scope.row.terminalType)))))}}
             </template>
           </el-table-column>
           <el-table-column label="大小" prop="fileSize" width="100" show-overflow-tooltip>

+ 3 - 0
src/views/iotDevice/appManage/applyUpgrades/index.vue

@@ -107,6 +107,9 @@
               <el-option label="化学品终端" value="aio_chemical"></el-option>
               <el-option label="电子信息牌" value="aio_infobord"></el-option>
               <el-option label="学习考试一体" value="aio_exam"></el-option>
+              <el-option label="化学品终端升级APP" value="aio_chemical_update"></el-option>
+              <el-option label="电子信息牌升级APP" value="aio_infobord_update"></el-option>
+              <el-option label="学习考试一体升级APP" value="aio_exam_update"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item label="分批升级数量" prop="batchSize" label-width="120px">

+ 3 - 0
src/views/iotDevice/appManage/applyUpgradesQuest/index.vue

@@ -44,6 +44,9 @@
               <el-option label="化学品终端" value="aio_chemical"></el-option>
               <el-option label="电子信息牌" value="aio_infobord"></el-option>
               <el-option label="学习考试一体" value="aio_exam"></el-option>
+              <el-option label="化学品终端升级APP" value="aio_chemical_update"></el-option>
+              <el-option label="电子信息牌升级APP" value="aio_infobord_update"></el-option>
+              <el-option label="学习考试一体升级APP" value="aio_exam_update"></el-option>
             </el-select>
           </el-form-item>
           <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>

+ 8 - 7
src/views/safetyCheck/components/initiateInspect/initiateInspect.vue

@@ -118,14 +118,15 @@
             </div>
           </div>
           <div class="content-right-flex-border-box" v-if="projectData.checkStatus == 1">
+            <!--<div class="right-text-box">-->
+              <!--<p class="right-text-name-p">检查人</p>-->
+              <!--<div class="right-text-title-box">-->
+                <!--<p>{{projectData.checkUserName}}-{{projectData.checkAccount}}</p>-->
+              <!--</div>-->
+            <!--</div>-->
             <div class="right-text-box">
-              <p class="right-text-name-p">检查人</p>
-              <div class="right-text-title-box">
-                <p>{{projectData.checkUserName}}-{{projectData.checkAccount}}</p>
-              </div>
-            </div>
-            <div class="right-text-box">
-              <p class="right-text-name-p" style="width:138px;">检查时间</p>
+              <!--<p class="right-text-name-p" style="width:138px;">检查时间</p>-->
+              <p class="right-text-name-p">检查时间</p>
               <div class="right-text-title-box">
                 <p>{{parseTime(projectData.checkTime,"{y}-{m}-{d} {h}:{i}")}}</p>
               </div>

+ 7 - 2
src/views/safetyCheck/components/noticeDom.vue

@@ -13,12 +13,17 @@
           <p class="noticeDom-title-2">请{{propsNoticeDomData.checkCategory == 1?'贵单位':'你实验室'}}务必高度重视,积极采取有效措施,切实加强对实验室的安全管理。同时,要举一反三,对实验室定期开展安全自查与整改,不断提升实验室安全工作水平。</p>
           <div class="noticeDom-title-min-box">
             <div></div>
-            <div>
+            <div v-if="documentData.checkCategory==1">
+              <p>实验室安全与条件保障处 </p>
+              <p>{{documentData.noticeYear}}年{{documentData.noticeMonth}}月{{documentData.noticeDay}}日</p>
+            </div>
+            <div v-if="documentData.checkCategory==2">
               <p>{{documentData.checkDeptName}}(公章)</p>
               <p>{{documentData.checkYear}}年{{documentData.checkMonth}}月{{documentData.checkDay}}日</p>
             </div>
           </div>
-          <img :src="documentData.checkDeptSign">
+          <img :src="documentData.checkDeptSign" v-if="documentData.checkCategory==2">
+          <!--<img :src="documentData.checkDeptSign">-->
         </div>
         <!--<div class="noticeDom-text-max-box">-->
           <!--<div class="noticeDom-text-box">-->

+ 12 - 3
src/views/safetyCheck/safetyHazard/rectificationNotice/index.vue

@@ -130,7 +130,7 @@
           </el-table-column>
           <el-table-column label="整改期限" prop="rectifyDeadline" width="160" show-overflow-tooltip>
             <template slot-scope="scope">
-              <span>{{ parseTime(scope.row.rectifyDeadline,"{y}-{m}-{d} {h}:{i}") }}</span>
+              <span>{{ parseTime(scope.row.rectifyDeadline,"{y}-{m}-{d}") }}</span>
             </template>
           </el-table-column>
           <el-table-column label="整改状态" prop="state" width="100" show-overflow-tooltip>
@@ -351,15 +351,24 @@
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
+          //生成时间
+          let date = new Date();
+          let year = date.getFullYear();
+          let month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份从0开始,需要加1,并确保两位数
+          let day = date.getDate().toString().padStart(2, '0'); // 确保两位数
+          let hours = date.getHours().toString().padStart(2, '0'); // 确保两位数
+          let minutes = date.getMinutes().toString().padStart(2, '0'); // 确保两位数
+          let seconds = date.getSeconds().toString().padStart(2, '0'); // 确保两位数
+          let time = year+month+day+hours+minutes+seconds
           let text = self.ids+'';
-          self.downloadGet('/security/rectifyNotice/genRectifyNote/zip?idListStr='+text+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '批量通知下载.zip')
+          self.downloadGet('/security/rectifyNotice/genRectifyNote/zip?idListStr='+text+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'),'整改通知书_'+time+'.zip')
           self.$refs['multipleTable'].clearSelection();
         }).then(() => {
         }).catch(() => {});
       },
       // 单个下载按钮
       downloadButton(row){
-        this.downloadGet('/security/rectifyNotice/getRectifyAdviceNote?noticeId='+row.noticeId+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '整改通知('+row.noticeNum+').docx')
+        this.downloadGet('/security/rectifyNotice/getRectifyAdviceNote?noticeId='+row.noticeId+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '整改通知('+row.noticeNum+').docx')
       },//学院下拉列表
       getDeptDropList(){
         getDeptDropList({level: 2, deptType: 1 }).then(response => {

+ 10 - 1
src/views/safetyCheck/safetyHazard/rectificationReport/index.vue

@@ -364,8 +364,17 @@
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
+          //生成时间
+          let date = new Date();
+          let year = date.getFullYear();
+          let month = (date.getMonth() + 1).toString().padStart(2, '0'); // 月份从0开始,需要加1,并确保两位数
+          let day = date.getDate().toString().padStart(2, '0'); // 确保两位数
+          let hours = date.getHours().toString().padStart(2, '0'); // 确保两位数
+          let minutes = date.getMinutes().toString().padStart(2, '0'); // 确保两位数
+          let seconds = date.getSeconds().toString().padStart(2, '0'); // 确保两位数
+          let time = year+month+day+hours+minutes+seconds
           let text = self.ids+'';
-          self.downloadGet('/security/rectifyReport/genReport/zip?idListStr='+text+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '批量报告下载.zip')
+          self.downloadGet('/security/rectifyReport/genReport/zip?idListStr='+text+'&fileUrl='+localStorage.getItem('fileBrowseEnvironment'), '整改报告_'+time+'.zip')
           self.$refs['multipleTable'].clearSelection();
         }).then(() => {
         }).catch(() => {});