Kaynağa Gözat

菜单集成

Shannon_mu 3 yıl önce
ebeveyn
işleme
8ebb0b5cb8
79 değiştirilmiş dosya ile 822 ekleme ve 74 silme
  1. 22 2
      operationSupport/src/assets/css/main.scss
  2. BIN
      operationSupport/src/assets/img/403.png
  3. BIN
      operationSupport/src/assets/img/404.png
  4. BIN
      operationSupport/src/assets/img/menuicon/btn_bianji.png
  5. BIN
      operationSupport/src/assets/img/menuicon/btn_bianji1.png
  6. BIN
      operationSupport/src/assets/img/menuicon/btn_caijiqi.png
  7. BIN
      operationSupport/src/assets/img/menuicon/btn_collapse.png
  8. BIN
      operationSupport/src/assets/img/menuicon/btn_daochu.png
  9. BIN
      operationSupport/src/assets/img/menuicon/btn_dizhi.png
  10. BIN
      operationSupport/src/assets/img/menuicon/btn_guan.png
  11. BIN
      operationSupport/src/assets/img/menuicon/btn_guanbi.png
  12. BIN
      operationSupport/src/assets/img/menuicon/btn_guanbi@2x.png
  13. BIN
      operationSupport/src/assets/img/menuicon/btn_guanliguize.png
  14. BIN
      operationSupport/src/assets/img/menuicon/btn_jizhongqi.png
  15. BIN
      operationSupport/src/assets/img/menuicon/btn_kai.png
  16. BIN
      operationSupport/src/assets/img/menuicon/btn_shanchu.png
  17. BIN
      operationSupport/src/assets/img/menuicon/btn_shanchu1.png
  18. BIN
      operationSupport/src/assets/img/menuicon/btn_shenhe.png
  19. BIN
      operationSupport/src/assets/img/menuicon/btn_shou.png
  20. BIN
      operationSupport/src/assets/img/menuicon/btn_tianjia.png
  21. BIN
      operationSupport/src/assets/img/menuicon/btn_tianjia2.png
  22. BIN
      operationSupport/src/assets/img/menuicon/btn_tingyong.png
  23. BIN
      operationSupport/src/assets/img/menuicon/btn_xiangqing.png
  24. BIN
      operationSupport/src/assets/img/menuicon/btn_xiazai.png
  25. BIN
      operationSupport/src/assets/img/menuicon/devicestatus-1.png
  26. BIN
      operationSupport/src/assets/img/menuicon/devicestatus-2.png
  27. BIN
      operationSupport/src/assets/img/menuicon/devicestatus-3.png
  28. BIN
      operationSupport/src/assets/img/menuicon/devicestatus-4.png
  29. BIN
      operationSupport/src/assets/img/menuicon/icon-add.png
  30. BIN
      operationSupport/src/assets/img/menuicon/icon-del.png
  31. BIN
      operationSupport/src/assets/img/menuicon/icon_anzhuang.png
  32. BIN
      operationSupport/src/assets/img/menuicon/icon_anzhuang1.png
  33. BIN
      operationSupport/src/assets/img/menuicon/icon_baojingguanli1.png
  34. BIN
      operationSupport/src/assets/img/menuicon/icon_bianji.png
  35. BIN
      operationSupport/src/assets/img/menuicon/icon_chaobiaoguanli1.png
  36. BIN
      operationSupport/src/assets/img/menuicon/icon_chaobiaolv.png
  37. BIN
      operationSupport/src/assets/img/menuicon/icon_chuangjian.png
  38. BIN
      operationSupport/src/assets/img/menuicon/icon_chuangjian1.png
  39. BIN
      operationSupport/src/assets/img/menuicon/icon_danganguanli1.png
  40. BIN
      operationSupport/src/assets/img/menuicon/icon_danyuanhu.png
  41. BIN
      operationSupport/src/assets/img/menuicon/icon_danyuanhu1.png
  42. BIN
      operationSupport/src/assets/img/menuicon/icon_delete.png
  43. BIN
      operationSupport/src/assets/img/menuicon/icon_ditu.png
  44. BIN
      operationSupport/src/assets/img/menuicon/icon_dizhi3.png
  45. BIN
      operationSupport/src/assets/img/menuicon/icon_dushu.png
  46. BIN
      operationSupport/src/assets/img/menuicon/icon_gailan.png
  47. BIN
      operationSupport/src/assets/img/menuicon/icon_jinyong.png
  48. BIN
      operationSupport/src/assets/img/menuicon/icon_liebiao1.png
  49. BIN
      operationSupport/src/assets/img/menuicon/icon_liebiao2.png
  50. BIN
      operationSupport/src/assets/img/menuicon/icon_lock.png
  51. BIN
      operationSupport/src/assets/img/menuicon/icon_qiyong2.png
  52. BIN
      operationSupport/src/assets/img/menuicon/icon_qiyong3.png
  53. BIN
      operationSupport/src/assets/img/menuicon/icon_shanjian.png
  54. BIN
      operationSupport/src/assets/img/menuicon/icon_shanjian1.png
  55. BIN
      operationSupport/src/assets/img/menuicon/icon_shijian.png
  56. BIN
      operationSupport/src/assets/img/menuicon/icon_tianjia.png
  57. BIN
      operationSupport/src/assets/img/menuicon/icon_tianjia1.png
  58. BIN
      operationSupport/src/assets/img/menuicon/icon_tishi_fuxian@2x.png
  59. BIN
      operationSupport/src/assets/img/menuicon/icon_tishi_zhengchang.png
  60. BIN
      operationSupport/src/assets/img/menuicon/icon_yanshou.png
  61. BIN
      operationSupport/src/assets/img/menuicon/icon_yanshou1.png
  62. BIN
      operationSupport/src/assets/img/menuicon/img_chaoshouchenggong.png
  63. BIN
      operationSupport/src/assets/img/menuicon/img_wuxiaoxi@2x.png
  64. BIN
      operationSupport/src/assets/img/menuicon/img_yingchaozongshu.png
  65. BIN
      operationSupport/src/assets/img/menuicon/radio_weixuan1@2x.png
  66. BIN
      operationSupport/src/assets/img/menuicon/radio_weixuan@2x.png
  67. BIN
      operationSupport/src/assets/img/menuicon/radio_yixuan1@2x.png
  68. BIN
      operationSupport/src/assets/img/menuicon/radio_yixuan@2x.png
  69. BIN
      operationSupport/src/assets/img/menuicon/tag_yanshou.png
  70. 8 8
      operationSupport/src/components/common/Sidebar.vue
  71. 3 1
      operationSupport/src/components/common/index.js
  72. 322 0
      operationSupport/src/components/common/newsearch.vue
  73. 33 33
      operationSupport/src/main.js
  74. 5 0
      operationSupport/src/router/dynamicMuen.js
  75. 16 11
      operationSupport/src/router/index.js
  76. 26 0
      operationSupport/src/views/403/index.vue
  77. 14 17
      operationSupport/src/views/404/index.vue
  78. 271 2
      operationSupport/src/views/alarmManagement/index.vue
  79. 102 0
      operationSupport/src/views/alarmManagement/newbasedata.js

+ 22 - 2
operationSupport/src/assets/css/main.scss

@@ -685,7 +685,7 @@ a {
 }
 
 @mixin searchTextBotton {
-    color: $mainTextColor; 
+    color: $mainTextColor;
     font-size: 30px;
 }
 // table 操作字体颜色
@@ -697,7 +697,7 @@ a {
     }
 }
 .search .search-icon i.iconfont {
-    @include searchTextBotton
+    @include searchTextBotton;
 }
 .handle-box,
 .search,
@@ -706,3 +706,23 @@ a {
         @include searchTextBotton;
     }
 }
+
+// 异常页面
+div.box-40 {
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    .title {
+        text-align: center;
+        margin-top: 40px;
+        h2 {
+            color: #424656;
+            font-size: 24px;
+        }
+        .text-title {
+            color: #aaadba;
+            margin: 10px 0 20px 0;
+        }
+    }
+}

BIN
operationSupport/src/assets/img/403.png


BIN
operationSupport/src/assets/img/404.png


BIN
operationSupport/src/assets/img/menuicon/btn_bianji.png


BIN
operationSupport/src/assets/img/menuicon/btn_bianji1.png


BIN
operationSupport/src/assets/img/menuicon/btn_caijiqi.png


BIN
operationSupport/src/assets/img/menuicon/btn_collapse.png


BIN
operationSupport/src/assets/img/menuicon/btn_daochu.png


BIN
operationSupport/src/assets/img/menuicon/btn_dizhi.png


BIN
operationSupport/src/assets/img/menuicon/btn_guan.png


BIN
operationSupport/src/assets/img/menuicon/btn_guanbi.png


BIN
operationSupport/src/assets/img/menuicon/btn_guanbi@2x.png


BIN
operationSupport/src/assets/img/menuicon/btn_guanliguize.png


BIN
operationSupport/src/assets/img/menuicon/btn_jizhongqi.png


BIN
operationSupport/src/assets/img/menuicon/btn_kai.png


BIN
operationSupport/src/assets/img/menuicon/btn_shanchu.png


BIN
operationSupport/src/assets/img/menuicon/btn_shanchu1.png


BIN
operationSupport/src/assets/img/menuicon/btn_shenhe.png


BIN
operationSupport/src/assets/img/menuicon/btn_shou.png


BIN
operationSupport/src/assets/img/menuicon/btn_tianjia.png


BIN
operationSupport/src/assets/img/menuicon/btn_tianjia2.png


BIN
operationSupport/src/assets/img/menuicon/btn_tingyong.png


BIN
operationSupport/src/assets/img/menuicon/btn_xiangqing.png


BIN
operationSupport/src/assets/img/menuicon/btn_xiazai.png


BIN
operationSupport/src/assets/img/menuicon/devicestatus-1.png


BIN
operationSupport/src/assets/img/menuicon/devicestatus-2.png


BIN
operationSupport/src/assets/img/menuicon/devicestatus-3.png


BIN
operationSupport/src/assets/img/menuicon/devicestatus-4.png


BIN
operationSupport/src/assets/img/menuicon/icon-add.png


BIN
operationSupport/src/assets/img/menuicon/icon-del.png


BIN
operationSupport/src/assets/img/menuicon/icon_anzhuang.png


BIN
operationSupport/src/assets/img/menuicon/icon_anzhuang1.png


BIN
operationSupport/src/assets/img/menuicon/icon_baojingguanli1.png


BIN
operationSupport/src/assets/img/menuicon/icon_bianji.png


BIN
operationSupport/src/assets/img/menuicon/icon_chaobiaoguanli1.png


BIN
operationSupport/src/assets/img/menuicon/icon_chaobiaolv.png


BIN
operationSupport/src/assets/img/menuicon/icon_chuangjian.png


BIN
operationSupport/src/assets/img/menuicon/icon_chuangjian1.png


BIN
operationSupport/src/assets/img/menuicon/icon_danganguanli1.png


BIN
operationSupport/src/assets/img/menuicon/icon_danyuanhu.png


BIN
operationSupport/src/assets/img/menuicon/icon_danyuanhu1.png


BIN
operationSupport/src/assets/img/menuicon/icon_delete.png


BIN
operationSupport/src/assets/img/menuicon/icon_ditu.png


BIN
operationSupport/src/assets/img/menuicon/icon_dizhi3.png


BIN
operationSupport/src/assets/img/menuicon/icon_dushu.png


BIN
operationSupport/src/assets/img/menuicon/icon_gailan.png


BIN
operationSupport/src/assets/img/menuicon/icon_jinyong.png


BIN
operationSupport/src/assets/img/menuicon/icon_liebiao1.png


BIN
operationSupport/src/assets/img/menuicon/icon_liebiao2.png


BIN
operationSupport/src/assets/img/menuicon/icon_lock.png


BIN
operationSupport/src/assets/img/menuicon/icon_qiyong2.png


BIN
operationSupport/src/assets/img/menuicon/icon_qiyong3.png


BIN
operationSupport/src/assets/img/menuicon/icon_shanjian.png


BIN
operationSupport/src/assets/img/menuicon/icon_shanjian1.png


BIN
operationSupport/src/assets/img/menuicon/icon_shijian.png


BIN
operationSupport/src/assets/img/menuicon/icon_tianjia.png


BIN
operationSupport/src/assets/img/menuicon/icon_tianjia1.png


BIN
operationSupport/src/assets/img/menuicon/icon_tishi_fuxian@2x.png


BIN
operationSupport/src/assets/img/menuicon/icon_tishi_zhengchang.png


BIN
operationSupport/src/assets/img/menuicon/icon_yanshou.png


BIN
operationSupport/src/assets/img/menuicon/icon_yanshou1.png


BIN
operationSupport/src/assets/img/menuicon/img_chaoshouchenggong.png


BIN
operationSupport/src/assets/img/menuicon/img_wuxiaoxi@2x.png


BIN
operationSupport/src/assets/img/menuicon/img_yingchaozongshu.png


BIN
operationSupport/src/assets/img/menuicon/radio_weixuan1@2x.png


BIN
operationSupport/src/assets/img/menuicon/radio_weixuan@2x.png


BIN
operationSupport/src/assets/img/menuicon/radio_yixuan1@2x.png


BIN
operationSupport/src/assets/img/menuicon/radio_yixuan@2x.png


BIN
operationSupport/src/assets/img/menuicon/tag_yanshou.png


+ 8 - 8
operationSupport/src/components/common/Sidebar.vue

@@ -91,10 +91,10 @@ export default {
         };
     },
     computed: {
-        ...mapState(['menuList']),
-        // menuList(){
-        //         return this.$store.getters['getMenuList']
-        // },
+        // ...mapState(['menuList']),
+        menuList(){
+                return this.$store.getters['getMenuList']
+        },
         onRoutes() {
             if (this.$route.path) {
                 let theme = darkTheme.has(this.$route.path) ? 'dark' : 'light';
@@ -122,7 +122,7 @@ export default {
             this.$store.dispatch('collapse', !this.collapse);
         },
         getMenuList(resolve) {
-            this.$http.get('/user/findUserMenu', { appId: '1001' }).then(({ status, data, msg }) => {
+            this.$http.get('/user/findUserMenu', { appId: '1002' }).then(({ status, data, msg }) => {
                 if (0 === status) {
                     this.siderMenuList = data[0].children;
                     resolve && resolve(true);
@@ -131,9 +131,9 @@ export default {
         }
     },
     created() {
-        new Promise((resolve) => {
-            this.getMenuList(resolve);
-        }).then((_) => {});
+        // new Promise((resolve) => {
+        //     this.getMenuList(resolve);
+        // }).then((_) => {});
     }
 };
 </script>

+ 3 - 1
operationSupport/src/components/common/index.js

@@ -13,6 +13,7 @@ import  SelectTree from './SelectTree';
 import MapInit from './MapInit';
 import dymicTable from './dymic_table';
 import alertModal from './alertModal';
+import newsearchForm from './newsearch';
 // 注册全局组件
 export default {
 	install() {
@@ -23,7 +24,8 @@ export default {
 			SelectTree,
 			alertModal,
 			dymicTable,
-			MapInit
+			MapInit,
+			newsearchForm,
 		];
 		_.each(components, v => {
 			Vue.component(v.name, v);

+ 322 - 0
operationSupport/src/components/common/newsearch.vue

@@ -0,0 +1,322 @@
+<!--
+ * @Author: zZ(zzy6937@qq.com)
+ * @Date: 2019-11-01 11:11:28
+ * @LastEditors: zwy
+ * @LastEditTime: 2021-02-02 18:22:13
+ * @Description: 通用搜索
+-->
+<template>
+  <form class="zz-search" ref="searchForm" @submit.prevent="search" action="">
+    <div class="search-normal">
+      <div class="col" v-for='(item, index) in normal' :key='index'>
+        <span class="search-box">
+					<span v-if="item.label" class='search-label'>{{item.label}}</span>
+          <span class="search-content">
+            <el-select v-if='item.options' :class="item.class" v-model="query[item.prop]" :placeholder="item.placeholder" clearable>
+              <el-option v-for='(o, ot) in item.options' :key='ot' :label="o.label" :value="o.value || o.id"></el-option>
+            </el-select>
+            <slot v-else-if='item.slot' :name="item.slot"></slot>
+            <el-input v-else :type="item.type" @input="(val)=> inputChange(val, item)" :class="item.class" :placeholder="item.placeholder" v-model.trim="query[item.prop]" clearable></el-input>
+          </span>
+				</span>
+      </div>
+      <el-button plain v-if='more.length'  @click="showMore = !showMore" class="more-search el-mgRight-md">
+					高级搜索<i  :class="showMore ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" class="el-icon--right"></i></el-button>	
+      <el-button v-if="normal.length && !showMore" native-type="submit" :disabled="btnDisabled" type='primary' class='search-btn' icon="el-icon-search">搜索</el-button>
+
+      <!-- <el-button class="button-has-icon" v-if='more.length' @click="showMore = !showMore">
+        高级搜索<i class="el-icon-caret-bottom el-icon--right" :class="{'top': showMore}"></i></el-button>
+      <el-button type="primary" native-type="submit" v-if='normal.length && !showMore'>搜索</el-button> -->
+    </div>
+    <el-collapse-transition>
+      <div class='search-more' v-show="showMore">
+        <div v-for="(item, index) in more" :key='index' class="col" :class="{'margin0': (index+1) % 6 === 0}">
+          <span class="search-box">
+            <span v-if="item.label" class='search-label'>{{item.label}}</span>
+            <span class="search-content">
+              <el-select v-if='item.options' :class="item.class" v-model="query[item.prop]" :placeholder="item.placeholder" clearable>
+                <el-option v-for='(o, ot) in item.options' :key='ot' :label="o.label" :value="o.value || o.id"></el-option>
+              </el-select>
+              <slot v-else-if='item.slot' :name="item.slot"></slot>
+              <el-input v-else :type="item.type"  @input="(val)=> inputChange(val, item)" :class="item.class" :placeholder="item.placeholder" v-model.trim="query[item.prop]" clearable></el-input>
+            </span>
+          </span>
+        </div>
+        <div  class="col">
+          <el-button type="primary" native-type="submit" icon="el-icon-search">搜索</el-button>
+          <el-button class="reset_button" @click="reset">重置</el-button>
+        </div>
+      </div>
+    </el-collapse-transition>
+    <slot name='right-opt'></slot>
+  </form>
+</template>
+<script>
+/**
+ * @description: 搜索控件
+ * @param {Object} normal: 基本搜索条件
+ * @param {Object} more: 更多搜索条件
+ * @param {Object} query: 绑定的数据对象
+ * @return {type}: null
+ * @author: zZ(zzy6937@qq.com)
+ */
+export default {
+  name: 'dmp-newsearch',
+  props: {
+    normal: {
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    more: {
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    query: {
+      type: Object,
+      default() {
+        return {}
+      }
+    },
+    resetQuery: {
+      type: Object,
+      default() {
+        return {}
+      }
+    },
+    // 不重置的字段集合
+    noSetKeys: {
+      type: Array,
+      default() {
+        return []
+      }
+    },
+    btnDisabled: {
+      type: Boolean,
+      default() {
+        return false
+      }
+    }
+  },
+  data() {
+    return {
+      showMore: false
+    }
+  },
+  methods: {
+    search() {
+      //this.showMore = false;
+      this.$emit('search');
+    },
+    reset() {
+      const set = new Set(this.noSetKeys)
+      if (_.isEmpty(this.resetQuery)) {
+        Object.keys(this.query).forEach((item) => {
+          if (!set.has(item)) {
+            this.query[item] = ''
+          }
+        })
+      } else {
+        const obj = {}
+        Object.keys(this.resetQuery).forEach((item) => {
+          if (!set.has(item)) {
+            obj[item] = ''
+          }
+        })
+        Object.assign(this.query, obj);
+      }
+      this.$emit("reset");
+    },
+    inputChange(val, item) {
+      const {type, maxlength} = item;
+      if(type == 'number' && maxlength) {
+        if(val.toString().length > maxlength) {
+          this.query[item.prop] = Number(val.toString().slice(0, maxlength));
+        }
+      }
+    }
+  },
+  /* mounted() {
+    this.$refs.searchForm.onkeydown = (event) => {
+      const e = event || window.event;
+      if (e && e.keyCode == 13) {
+        this.search();
+      }
+    };
+  }, */
+  created() {
+    const data = {}
+    this.more.forEach((item) => {
+      data[item.prop] = ''
+    })
+    this.normal.forEach((item) => {
+      data[item.prop] = ''
+    })
+    this.data = data;
+  }
+  /* beforeDestroy() {
+    this.$refs.searchForm.onkeydown = undefined;
+  } */
+}
+</script>
+<style lang="scss">
+.zz-search {
+  position:relative;
+	margin-bottom: 15px;
+  background:rgba(255,255,255,1);
+  border:1px solid rgba(234, 237, 243, 1);
+  .col {
+    display:inline-block;
+    vertical-align:middle;
+    .el-input,.el-select,.el-calendar,.el-cascader {
+      width: 180px;
+      input::-webkit-outer-spin-button,input::-webkit-inner-spin-button {
+        -webkit-appearance: none;
+        margin: 0;
+      }
+      input[type="number"] {
+        -moz-appearance: textfield;
+      }
+    }
+    .inherit-css {
+      width: 140px !important;
+      .el-input {
+        width: 100% !important;
+      }
+    }
+    .min-css{
+      width: 110px !important;
+      .el-input {
+        width: 100% !important;
+      }
+    }
+  }
+  .search-box {
+    display: flex;
+    align-items:center;
+    .search-label {
+      margin-right: 0.520833333333333vw;
+      color: #3b4045;
+      font-size: 0.729166666666667vw;
+      vertical-align: middle;
+      display: inline-block;
+      //min-width vw(60)
+      text-align: justify;
+      text-align-last: justify;
+    }
+  }
+  .search-normal {
+    border-radius:6px 6px 0px 0px;
+    font-size: 0;
+		padding: 15px;
+    position: relative;
+    // margin: 20px 0;
+    .col, .el-button {
+      margin-right: 20px;
+    }
+    .el-button {
+      vertical-align: middle;
+      margin-right: 15px;
+    }
+    .el-button +.el-button {
+      margin-left: 0;
+    }
+    &:before {
+      content:' ';
+      width: 0;
+      height: 100%;
+      display: inline-block;
+      vertical-align: middle;
+    }
+    .button-has-icon {
+      padding-right: 5px;
+      .el-icon-caret-bottom {
+        transition: all .3s;
+        &.top {
+          transform: scale(0.8) rotate(180deg);
+        }
+      }
+    }
+  }
+  .search-more {
+    padding: 0 15px;
+    font-size: 0;
+    width: 100%;
+    .el-input, .el-select {
+      width: 100%;
+    }
+    .col {
+      margin-right: 20px;
+      margin-bottom: 20px;
+      .el-input,.el-select,.el-calendar,.el-cascader {
+        width: 180px;
+      }
+    }
+    
+    .el-button {
+      min-width: 68px;	
+    }
+		.reset_button{
+			border: 1px solid #0D87F9;
+			opacity: 1;
+			border-radius: 4px;
+		}
+    .el-button--default {
+      margin-left: 20px;
+    }
+    .dmp-date-picker .el-input__inner {
+      border: none;
+      padding: 0 15px;
+    }
+  }
+  .opt {
+    position: absolute;
+    top: 15px;
+    right: 20px;
+    display: flex;
+    align-items: top;
+    background-color: #FFF;
+		align-items: center;
+    user-select: none;
+    img{
+      width:30px;
+      height:30px;
+      margin-right: 10px;
+    }
+    &>.dmp-icon-big, &>.dmp-icon-big .dmp-icon-big{
+      width: 32px;
+      height: 32px;
+      margin-left: 20px;
+      font-size: 14px !important;
+      justify-content: center;
+      display: flex;
+      align-items: center;
+      padding: 0;
+    }
+    &>.dmp-icon-big .dmp-icon-big {
+      margin: 0;
+    }
+  }
+}
+@media screen and (min-width: 1600px) {
+  .zz-search {
+    .search-normal .col {
+      .el-input,.el-select,.el-calendar,.el-cascader {
+        width: 180px;
+      }
+    }
+  }
+}
+@media screen and (max-width: 1599px) {
+  .zz-search {
+    .search-normal .col {
+      .el-input,.el-select,.el-calendar,.el-cascader {
+        width: 125px !important
+      }
+    }
+  }
+}
+</style>

+ 33 - 33
operationSupport/src/main.js

@@ -73,46 +73,46 @@ Vue.prototype.routerLoad = {
 };
 //使用钩子函数对路由进行权限跳转
 router.beforeEach((to, from, next) => {
-    if (to.path != '/404') {
-        // 跳转时存储路由
-        localStorage.setItem('path', to.fullPath)
-    }
-    next();
+    // if (to.path != '/404') {
+    //     // 跳转时存储路由
+    //     localStorage.setItem('path', to.fullPath)
+    // }
+    // next();
 
-    // if (localStorage.getItem("SC_token")) {
-    //     let menuList = window.sessionStorage.getItem("listMuen")
-    //     let newAr = [];
-    //     if (menuList === null || menuList === undefined) {
-    //         http.get('/sc-user-center/user/findUserMenu', { appId: '1002' }).then(({ status, data, msg }) => {
-    //             if (0 == status) {
-    //                 let datas = data[0].children
-    //                 window.sessionStorage.setItem('listMuen', JSON.stringify(datas))
-    //                 funcRouter(newAr, datas, router)
-    //                 next({ ...to, replace: true })
-    //             } else {
-    //                 this.$message.error(msg);
-    //             }
-    //         })
-    //     } else {
-    //         if (router.options.routes[0].children.length === 0) {
-    //             funcRouter(newAr, JSON.parse(menuList), router)
-    //             next({ ...to, replace: true })
-    //         } else {
-    //             next()
-    //         }
+    if (localStorage.getItem("SC_token")) {
+        let menuList = window.sessionStorage.getItem("operationMuen")
+        let newAr = [];
+        if (menuList === null || menuList === undefined) {
+            http.get('/sc-user-center/user/findUserMenu', { appId: '1002' }).then(({ status, data, msg }) => {
+                if (0 == status) {
+                    let datas = data[0].children
+                    window.sessionStorage.setItem('operationMuen', JSON.stringify(datas))
+                    funcRouter(newAr, datas, router)
+                    next({ ...to, replace: true })
+                } else {
+                    this.$message.error(msg);
+                }
+            })
+        } else {
+            if (router.options.routes[0].children.length === 0) {
+                funcRouter(newAr, JSON.parse(menuList), router)
+                next({ ...to, replace: true })
+            } else {
+                next()
+            }
 
-    //     }
-    // } else {
-    //     next();
-    // }
+        }
+    } else {
+        next();
+    }
 });
 new Vue({
     router,
     store,
     render: h => h(App),
     created() {
-        if (localStorage.getItem('SC_token')) {
-            this.routerLoad.loadMenus();
-        }
+        // if (localStorage.getItem('SC_token')) {
+        //     this.routerLoad.loadMenus();
+        // }
     }
 }).$mount('#app');

+ 5 - 0
operationSupport/src/router/dynamicMuen.js

@@ -6,6 +6,11 @@ const staticMuen = [
     component: () => import(/* webpackChunkName: "messages" */ '@views/messages'),
     meta: { title: '消息中心' }
   },
+  {
+    path: '/403',
+    component: () => import(/* webpackChunkName: "404" */ '@views/403'),
+    meta: { title: '403' }
+  },
   {
     path: '/404',
     component: () => import(/* webpackChunkName: "404" */ '@views/404'),

+ 16 - 11
operationSupport/src/router/index.js

@@ -14,17 +14,22 @@ export default new Router({
             path: '/',
             component: () => import(/* webpackChunkName: "home" */ '../components/common/Home.vue'),
             children: [ 
-                {
-                    path: '/msg',
-                    name: 'msg',
-                    component: () => import(/* webpackChunkName: "messages" */ '@views/messages'),
-                    meta: { title: '消息中心' }
-                  },
-                  {
-                    path: '/404',
-                    component: () => import(/* webpackChunkName: "404" */ '@views/404'),
-                    meta: { title: '404' }
-                  },
+                // {
+                //     path: '/msg',
+                //     name: 'msg',
+                //     component: () => import(/* webpackChunkName: "messages" */ '@views/messages'),
+                //     meta: { title: '消息中心' }
+                //   },
+                //   {
+                //     path: '/403',
+                //     component: () => import(/* webpackChunkName: "404" */ '@views/403'),
+                //     meta: { title: '403' }
+                //   },
+                //   {
+                //     path: '/404',
+                //     component: () => import(/* webpackChunkName: "404" */ '@views/404'),
+                //     meta: { title: '404' }
+                //   },
             ]
         },
         {

+ 26 - 0
operationSupport/src/views/403/index.vue

@@ -0,0 +1,26 @@
+<!--
+ * @Description: 
+ * @Date: 2020-11-13 13:30:36
+ * @LastEditTime: 2021-06-01 08:36:34
+ * @FilePath: \WEB\userCenter\src\views\system\404\index.vue
+-->
+<template>
+    <div class="box-40">
+        <img src="@/assets/img/403.png" alt="" />
+        <div class="title">
+            <h2>404</h2>
+            <div class="text-title">抱歉,您无权访问此页面</div>
+            <el-button type="primary" @click="goback()">返回</el-button>
+        </div>
+    </div>
+</template>
+
+<script>
+export default {
+    methods: {
+        goback() {
+            history.go(-1)
+        }
+    }
+};
+</script>

+ 14 - 17
operationSupport/src/views/404/index.vue

@@ -5,25 +5,22 @@
  * @FilePath: \WEB\userCenter\src\views\system\404\index.vue
 -->
 <template>
-    <div class="box-404">
-        <img src="@/assets/img/404.png" alt="">
+    <div class="box-40">
+        <img src="@/assets/img/404.png" alt="" />
+        <div class="title">
+            <h2>404</h2>
+            <div class="text-title">抱歉,您访问的页面不存在</div>
+            <el-button type="primary" @click="goback()">返回</el-button>
+        </div>
     </div>
 </template>
 
-<style lang="scss" scope>
-    div.box-404{
-        width: 100%;
-        height: 100%;
-        img{
-            display: block;
-            width: 500px;
-            height: 156px;
-            position: absolute;
-            left: 0;
-            top: 0;
-            right: 0;
-            bottom: 0;
-            margin: auto;
+<script>
+export default {
+    methods: {
+        goback() {
+            history.go(-1)
         }
     }
-</style>
+};
+</script>

+ 271 - 2
operationSupport/src/views/alarmManagement/index.vue

@@ -1,5 +1,274 @@
 <template>
-    <div>告警管理</div>
+    <div class="deviceWarn">
+        <div class="list no-scrollbar" v-if="!showDialog">
+            <dmp-newsearch :normal="normal" :query="mixins_query" @search="queryList" @reset="resetSearch">
+                <template slot="alarmCategory">
+                    <div class="radio_button">
+                        <el-radio-group v-model="mixins_query.alarmCategory" @change="changeRadio()" class="zz-tab-button">
+                            <el-radio-button label="1">告警</el-radio-button>
+                            <el-radio-button label="2">离线</el-radio-button>
+                        </el-radio-group>
+                    </div>
+                </template>
+                <el-input slot="alarmName" placeholder="告警名称" v-model="mixins_query.alarmName" clearable></el-input>
+                <div class="opt" slot="right-opt">
+                    <el-tooltip placement="bottom" class="item" effect="light" content="添加">
+                        <!-- <img src="@assets/img/menuicon/btn_tianjia.png" class="tab_head-right" @click="addEdit('add')" /> -->
+                        <img class="tab_head-right" @click="addEdit('add')" />
+                    </el-tooltip>
+                </div>
+            </dmp-newsearch>
+            <div class="device-manage-table">
+                <zz-table
+                    :settings="{ showCheckbox: false, showIndex: true, stripe: true }"
+                    :cols="cols"
+                    :data="mixins_list"
+                    :loading="mixins_onQuery"
+                    :pageset="mixins_pageset"
+                    @page-change="pageChange"
+                    @selection-change="selectionChange"
+                >
+                    <template slot-scope="scope" slot="enabled">
+                        <p>
+                            {{ scope.row.enabled ? '启用' : '禁用' }}
+                        </p>
+                    </template>
+                    <template slot-scope="scope" slot="opt">
+                        <div class="opt">
+                            <el-tooltip class="item" effect="light" placement="bottom" :content="scope.row.enabled ? '启用' : '禁用'">
+                                <img
+                                    v-if="!scope.row.enabled"
+                                    src="@assets/img/menuicon/icon_jinyong.png"
+                                    height="16"
+                                    @click="enabledStatus(scope.row)"
+                                />
+                                <img v-else src="@assets/img/menuicon/icon_lock.png" height="16" @click="enabledStatus(scope.row)" />
+                            </el-tooltip>
+                            <el-tooltip class="item" effect="light" placement="bottom" content="编辑">
+                                <img src="@assets/img/menuicon/icon_bianji.png" height="16" @click="addEdit('edit', scope.row)" />
+                            </el-tooltip>
+                            <el-tooltip class="item" effect="light" placement="bottom" content="删除">
+                                <img src="@assets/img/menuicon/icon_delete.png" height="16" @click="delRow(scope.row)" />
+                            </el-tooltip>
+                        </div>
+                    </template>
+                </zz-table>
+            </div>
+        </div>
+    </div>
 </template>
 <script>
-</script>
+import list from '@utils/list';
+import { sysQuery, sysColumnConfig, sysSearchConfig } from './newbasedata.js';
+export default {
+    components: {
+        // detail
+    },
+    mixins: [list],
+    data() {
+        return {
+            normal: [],
+            more: [],
+            cols: [],
+            deviceOptions: [],
+            productOptions: [],
+            isWaterMeter: false,
+            alarmTypeIds: [],
+            times: [],
+            pickerOptions: {
+                disabledDate(val) {
+                    return +new Date(val) > +new Date();
+                }
+            },
+            updateFlag: false,
+            showDialog: false,
+            scenetypeList: [],
+            defaultProps: {
+                value: 'id', // 唯一标识
+                label: 'sceneId', // 标签显示
+                children: 'children' // 子级
+            }
+        };
+    },
+    computed: {},
+    methods: {
+        getDeviceOptions() {
+            this.$http.post('/device/selectList', {}).then(({ data }) => {
+                this.deviceOptions = data;
+            });
+        },
+        getProductOptions() {
+            this.$http.postForm('/devicetype/selectList', { name: '' }).then((data) => {
+                this.productOptions = data;
+            });
+        },
+        addEdit(todo, data = {}) {
+            new Promise((resolve) => {
+                let title = '添加告警';
+                if (todo == 'add') {
+                    title = this.mixins_query.alarmCategory == '2' ? '添加离线规则' : '添加告警';
+                } else {
+                    title = this.mixins_query.alarmCategory == '2' ? '编辑离线规则' : `编辑-${data.alarmName}`;
+                }
+                this.$store.dispatch('addPopup', {
+                    url: '/AlarmControl/popups/addoreditalarm',
+                    title: title,
+                    height: '935px',
+                    props: {
+                        todo,
+                        data,
+                        deviceOptions: this.deviceOptions,
+                        productOptions: this.productOptions,
+                        alarmCategory: this.mixins_query.alarmCategory,
+                        callback: resolve
+                    },
+                    hideFoot: todo == 'view'
+                });
+            }).then(() => {
+                this.mixins_search('refresh');
+            });
+        },
+        enabledStatus(rowinfo) {
+            this.$http.get(`/zoniot-rmcp-web/system/alarmType/update/enabled?id=${rowinfo.id}`).then(({ status, msg }) => {
+                if (status == 0) {
+                    this.$message.success(msg);
+                    this.mixins_search('refresh');
+                } else {
+                    this.$message.error(msg);
+                }
+            });
+        },
+        delRow(rowinfo) {
+            const { id, alarmName } = rowinfo;
+            this.$msgBox(`删除告警“${alarmName}”`)
+                .then(() => {
+                    const $loading = this.$loading();
+                    this.$http
+                        .get(`/zoniot-rmcp-web/system/alarmType/delete?id=${id}`)
+                        .then(({ status, msg }) => {
+                            $loading.close();
+                            if (status == 0) {
+                                this.mixins_search('del');
+                                this.$message.success(msg);
+                                // this.$store.dispatch('device/getAlarmTypeList', true);
+                            } else {
+                                this.$message.error(msg);
+                            }
+                        })
+                        .catch(() => {
+                            $loading.close();
+                        });
+                })
+                .catch(() => {});
+        },
+        //获取场景树
+        getAllScene() {
+            this.$http.get('/zoniot-water/scene/selectList').then(({ status, data, msg }) => {
+                if (status === 0) {
+                    this.scenetypeList = data;
+                }
+            });
+        },
+        resetSearch() {
+            this.times = [];
+            const params = JSON.parse(JSON.stringify(sysQuery.params));
+            this.alarmTypeIds = [];
+            this.mixins_query = params;
+            this.queryList();
+        },
+        // 查询所有站点
+        getAllSiteList() {
+            this.$http.get('/system/tenant/getList').then(({ status, data = [] }) => {
+                if (status === 0) {
+                    _.each(data, (v) => {
+                        v.children = [];
+                        v.label = v.name;
+                        v.value = v.id;
+                    });
+                    this.adminAlarmTypeOptions = data;
+                }
+            });
+        },
+        siteChange(id) {
+            // this.getAlarmStatus(id[0]);
+        },
+        alarmTypeChange(ids) {
+            this.mixins_query.alarmTypeId = _.last(ids);
+        },
+        getAlarmStatus(id) {
+            this.$http
+                .get('/zoniot-rmcp-web/system/alarmType/getAlarmTypeList', {
+                    siteId: id,
+                    channelId: this.sysId
+                })
+                .then(({ status, msg, data = [] }) => {
+                    if (status === 0) {
+                        const index = _.findIndex(this.adminAlarmTypeOptions, (v) => v.id === id);
+                        _.each(data, (v) => {
+                            v.label = v.name;
+                            v.value = v.id;
+                        });
+                        this.adminAlarmTypeOptions[index].children = data;
+                    }
+                });
+        },
+        queryList(type = 'search') {
+            this.mixins_post = 'post';
+            this.mixins_dataUrl = '/zoniot-rmcp-web/system/alarmType/page';
+            this.mixins_search(type);
+        },
+        exportExcel() {
+            if (this.times && this.times.length) {
+                this.mixins_query.startDate = `${this.times[0]}000000`;
+                this.mixins_query.endDate = `${this.times[1]}235959`;
+            } else {
+                this.mixins_query.startDate = '';
+                this.mixins_query.endDate = '';
+            }
+        },
+        setConfigs() {
+            const alias = 'loraMeter';
+            // 搜索
+            const conditions = JSON.parse(JSON.stringify(sysSearchConfig.conditions));
+            let conditionsFilterConf = JSON.parse(JSON.stringify(sysSearchConfig['water'] || sysSearchConfig.other));
+            const allCols = JSON.parse(JSON.stringify(sysColumnConfig.cols));
+            let colFilterConf = [];
+            if (this.mixins_query.alarmCategory == '1') {
+                colFilterConf = JSON.parse(JSON.stringify(sysColumnConfig['done'] || sysColumnConfig.other));
+            } else {
+                colFilterConf = JSON.parse(JSON.stringify(sysColumnConfig['undone'] || sysColumnConfig.other));
+            }
+            this.normal = _.filter(conditions, (v) => conditionsFilterConf.normal.includes(v.prop));
+            // 列表
+            this.cols.splice(0, this.cols.length);
+            this.cols = _.filter(allCols, (v) => colFilterConf.includes(v.prop));
+        },
+        changeRadio(val) {
+            let radioVal = val;
+            this.setConfigs();
+            this.queryList();
+        },
+        viewDetail(index) {
+            let row = this.mixins_list[index];
+            this.dialogParams = { data: JSON.parse(JSON.stringify(row)) };
+            this.showDialog = true;
+        }
+    },
+    watch: {},
+    created() {
+        this.getDeviceOptions();
+        this.getProductOptions();
+    },
+    mounted() {
+        const params = JSON.parse(JSON.stringify(sysQuery.params));
+        this.mixins_query = params;
+        this.setConfigs();
+        this.queryList();
+    }
+};
+</script>
+<style lang="scss" scoped>
+.deviceWarn {
+    height: 100%;
+}
+</style>

+ 102 - 0
operationSupport/src/views/alarmManagement/newbasedata.js

@@ -0,0 +1,102 @@
+/*
+ * @Author: wf
+ * @Date: 2021-08-18 09:22:19
+ * @LastEditors: wf
+ * @LastEditTime: 2021-08-18 17:22:40
+ * @Description: 告警数据配置
+ */
+		export const sysQuery = {
+			params: {
+				alarmCategory:'1',
+				alarmName:'',
+				sceneType:'5'
+			},
+			undone: {// 未处理告警列表查询字段
+				exportUrl: '/zoniot-rmcp-web/Abnormal/getAllAbnormalExcel'
+			},
+			done: {// 已处理告警列表查询字段
+				exportUrl: '/zoniot-rmcp-web/Abnormal/getAllHandleAbnormalExcel'
+			}
+		}
+		
+		/**
+		 * @description: 系统告警搜索条件配置
+		 * @param : conditions 条件汇总 | alias 场景别名区分常显和更多过滤条件
+		 * @return: 
+		 */
+		export const sysSearchConfig = {
+			conditions: [
+				{
+					label: '',
+					prop: 'alarmCategory',
+					slot: 'alarmCategory',    
+				},
+				{
+					label: '',
+					prop: 'alarmName',
+					slot: 'alarmName',
+					placeholder: '告警名称',
+				}	
+			],
+			water: {
+				normal: ['alarmCategory', 'alarmName'],
+				more: [],
+			},
+			other: {
+				normal: ['alarmCategory', 'alarmName'],
+				more: [],
+			}
+		}
+		
+		
+		export const alarmMeasuringDatasFormat = (val) => {
+			let str = '';
+			_.each(val, (item) => {
+				str += `${item.measuringName}:${item.showData || '--'}${item.measuringUnit || ''};`
+			})
+			return str;
+		}
+		
+		/* 告警列表配置,按照场景别名区分 */
+		export const sysColumnConfig = {
+			cols: [
+				{
+					label: '产品',
+					prop: 'productName'     
+				},{
+					label: '设备编号',
+					prop: 'deviceNo',    
+				},{
+					label: '告警名称',
+					prop: 'alarmName',    
+				},{
+					label: '告警描述',
+					prop: 'desc', 
+				}, {
+					label: '规则',
+					prop: 'alarmRuleNum',
+				}, {
+					label: '状态',
+					prop:'enabled',
+					slot:'enabled',
+				},
+				{
+					label: '操作',
+					prop: 'opt',
+					slot: 'opt',
+				}
+			],
+			done:['productName', 'deviceNo', 'alarmName', 'desc', 'alarmRuleNum',
+			'enabled','opt'],
+			undone:['productName', 'deviceNo', 'alarmName', 'desc', 'alarmRuleNum',
+			'enabled','opt'],
+			loraMeter: ['alarmTypeName', 'lastAlarmTime', 'deviceNo', 'meterNo', 'deviceModel',
+				'companyName', 'deptName', 'address','handleTime','opt'],
+			nbiotMeter:['alarmTypeName', 'lastAlarmTime', 'deviceNo', 'meterNo', 'deviceModel',
+			'companyName', 'deptName', 'address','handleTime','opt'],
+			other: ['sceneName', 'deviceType', 'deviceName', 'alarmContent', 'attributeName',
+			'opState', 'state', 'opt'],
+		}
+		
+	
+