dedsudiyu 1 年之前
父節點
當前提交
40b67b57bf

二進制
src/assets/ZDimages/iotDevice/dianhua.png


二進制
src/assets/ZDimages/iotDevice/dingding.png


二進制
src/assets/ZDimages/iotDevice/duanxin.png


二進制
src/assets/ZDimages/iotDevice/weixin.png


二進制
src/assets/ZDimages/iotDevice/youjian.png


+ 58 - 0
src/directive/permission/hasPermiRouter.js

@@ -0,0 +1,58 @@
+/**
+ * v-hasPermiRouter 操作权限处理
+ * Copyright (c) 2023 ded
+ */
+
+import store from '@/store'
+import router from '@/router'
+
+export default {
+  inserted(el, binding, vnode) {
+    let pageRoute = router.currentRoute.matched[router.currentRoute.matched.length-1].name
+    const { value } = binding
+    const all_permission = "*:*:*";
+    const permissions = store.getters && store.getters.permissions
+    if (permissions == all_permission) {
+      return true
+    }else if (value && value instanceof Array && value.length > 0) {
+      const permissionFlag = value
+      let maxNum = 0;
+      for(let i=0;i<permissions.length;i++){
+        if(permissions[i].path == pageRoute){
+          maxNum++
+          if(permissionFlag[1]){
+            let num = 0;
+            for(let o=0;o<permissionFlag.length;o++){
+              if(permissions[i].permissions == all_permission){
+                num++
+              }else{
+                if(permissions[i].permissions.includes(permissionFlag[o], 0)){
+                  num++
+                }
+              }
+            }
+            if(num == permissionFlag.length){
+              return true
+            } else {
+              el.parentNode && el.parentNode.removeChild(el)
+              return false
+            }
+          }else{
+            const hasPermissions = permissions[i].permissions.some(permission => {
+              return all_permission === permission || permissionFlag.includes(permission)
+            })
+            if (!hasPermissions) {
+              el.parentNode && el.parentNode.removeChild(el)
+            }
+          }
+        }
+      }
+      if (maxNum == 0){
+        el.parentNode && el.parentNode.removeChild(el)
+      }
+    } else {
+      throw new Error(`请设置操作权限标签值`)
+    }
+  }
+}
+

+ 323 - 0
src/views/iotDevice/monitoringWarning/warningMode/addPage.vue

@@ -0,0 +1,323 @@
+<template>
+  <div class="warningModeAddPage">
+    <div class="title-box">
+      <p>{{showType?'详情':(newData.typeId?'编辑':'新增')}}</p>
+      <p class="reset-button-one" @click="backPage">返回</p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form class="add-form-box" :model="newData" ref="form" :rules="showType?noRules:rules" label-width="120px">
+        <el-form-item label="名称:" prop="name">
+          <el-input :disabled="showType" v-model="newData.name" placeholder="请输入名称" maxLength="20" style="width:500px;"></el-input>
+        </el-form-item>
+        <el-form-item label="方式:" prop="alarmType">
+          <el-select :disabled="showType" v-model="newData.alarmType" placeholder="请选择方式" style="width:500px;">
+            <el-option
+              v-for="item in typeList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <div v-if="newData.alarmType == 1">
+          <el-form-item label="类型:" prop="category">
+            <el-radio-group :disabled="showType" v-model="newData.category">
+              <el-radio :label="1">钉钉消息</el-radio>
+              <el-radio :label="2">钉钉群机器人</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="appKey:" prop="key" v-if="newData.category==1">
+            <el-input :disabled="showType" v-model="newData.key" placeholder="请输入appKey" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="appSecret:" prop="secret" v-if="newData.category==1">
+            <el-input :disabled="showType" v-model="newData.secret" placeholder="请输入appSecret" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="webHook:" prop="host" v-if="newData.category==2">
+            <el-input :disabled="showType" v-model="newData.host" placeholder="请输入webHook" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+        </div>
+        <div v-if="newData.alarmType == 2">
+          <el-form-item label="类型:" prop="category">
+            <el-radio-group :disabled="showType" v-model="newData.category">
+              <el-radio :label="1">企业微信</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="corpId:" prop="key" v-if="newData.category==1">
+            <el-input :disabled="showType" v-model="newData.key" placeholder="请输入corpId" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="corpSecret:" prop="secret" v-if="newData.category==1">
+            <el-input :disabled="showType" v-model="newData.secret" placeholder="请输入corpSecret" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+        </div>
+        <div v-if="newData.alarmType == 3">
+          <el-form-item label="email:" prop="email">
+            <el-input :disabled="showType" v-model="newData.email" placeholder="请输入email" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="host:" prop="host">
+            <el-input :disabled="showType" v-model="newData.host" placeholder="请输入host" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="port:" prop="port">
+            <el-input :disabled="showType" v-model="newData.port" placeholder="请输入port" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="account:" prop="account">
+            <el-input :disabled="showType" v-model="newData.account" placeholder="请输入account" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="passwd:" prop="passwd">
+            <el-input :disabled="showType" v-model="newData.passwd" placeholder="请输入passwd" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="timeout:" prop="timeout">
+            <el-input :disabled="showType" v-model="newData.timeout" placeholder="请输入timeout" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+        </div>
+        <div v-if="newData.alarmType == 4">
+          <el-form-item label="类型:" prop="category">
+            <el-radio-group :disabled="showType" v-model="newData.category">
+              <el-radio :label="1">专业设备</el-radio>
+              <el-radio :label="2">阿里云语音</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="主机:" prop="host">
+            <el-input :disabled="showType" v-model="newData.host" placeholder="请输入主机" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="key:" prop="key" v-if="newData.category==2">
+            <el-input :disabled="showType" v-model="newData.key" placeholder="请输入host" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="secret:" prop="secret" v-if="newData.category==2">
+            <el-input :disabled="showType" v-model="newData.secret" placeholder="请输入port" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+        </div>
+        <div v-if="newData.alarmType == 5">
+          <el-form-item label="类型:" prop="category">
+            <el-radio-group :disabled="showType" v-model="newData.category">
+              <el-radio :label="1">专业设备</el-radio>
+              <el-radio :label="2">阿里云短信</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="主机:" prop="host">
+            <el-input :disabled="showType" v-model="newData.host" placeholder="请输入主机" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="key:" prop="key" v-if="newData.category==2">
+            <el-input :disabled="showType" v-model="newData.key" placeholder="请输入host" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+          <el-form-item label="secret:" prop="secret" v-if="newData.category==2">
+            <el-input :disabled="showType" v-model="newData.secret" placeholder="请输入port" maxLength="200" style="width:500px;"></el-input>
+          </el-form-item>
+        </div>
+        <el-form-item label="说明:" prop="remark">
+          <el-input
+            :disabled="showType"
+            style="width:500px;"
+            type="textarea"
+            resize="none"
+            maxLength="50"
+            :rows="6"
+            placeholder="请输入执行描述"
+            show-word-limit
+            v-model="newData.remark"></el-input>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="button-box" v-if="!showType">
+      <p class="null-p"></p>
+      <p class="button-p inquire-button-one" @click="submitForm">提交</p>
+      <p class="null-p"></p>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'addPage',
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+        showType:false,
+        newData:{},
+        rules:{
+          name: [
+            { required: true, message: "请输入名称", trigger: "blur" },
+            { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          alarmType: [
+            { required: true, message: "请选择方式", trigger: "blur" },
+            { required: true, message: "请选择方式", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          category: [
+            { required: true, message: "请选择类型", trigger: "blur" },
+            { required: true, message: "请选择类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          key: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          secret: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          host: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          email: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          port: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          account: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          passwd: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          timeout: [
+            { required: true, message: "请输入", trigger: "blur" },
+            { required: true, message: "请输入", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+        noRules:{},
+        typeList:[
+          {name:"钉钉",id:1,},
+          {name:"微信",id:2,},
+          {name:"邮件",id:3,},
+          {name:"电话",id:4,},
+          {name:"短信",id:5,},
+        ],
+      }
+    },
+    created(){
+      this.initialize();
+    },
+    mounted(){
+
+    },
+    methods:{
+      //初始化
+      initialize(){
+        this.$set(this,'showType',this.propsData.showType);
+        if(this.propsData.typeId){
+          let params = JSON.parse(this.propsData.params)
+          let obj = {
+            typeId:this.propsData.typeId,
+            name:this.propsData.name,
+            alarmType:this.propsData.alarmType,
+            category:this.propsData.category,
+            remark:this.propsData.remark,
+            key:params.key?params.key:null,
+            secret:params.secret?params.secret:null,
+            host:params.host?params.host:null,
+            email:params.email?params.email:null,
+            port:params.port?params.port:null,
+            account:params.account?params.account:null,
+            passwd:params.passwd?params.passwd:null,
+            timeout:params.timeout?params.timeout:null,
+          };
+          this.$set(this,'newData',obj);
+        }else{
+          this.$set(this,'newData',{
+            name:'',
+            alarmType:1,
+            category:1,
+            remark:'',
+            key:'',
+            secret:'',
+            host:'',
+            email:'',
+            port:'',
+            account:'',
+            passwd:'',
+            timeout:'',
+          });
+        }
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.tableButton(6);
+      },
+
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            let obj = JSON.parse(JSON.stringify(this.newData))
+            let newObj = {
+              name:obj.name,
+              alarmType:obj.alarmType,
+              category:obj.alarmType == 3 ? obj.category : 0,
+              remark:obj.remark,
+
+            }
+          }
+        })
+      }
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .warningModeAddPage{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+    .title-box{
+      display: flex;
+      border-bottom:1px solid #dedede;
+      p:nth-child(1){
+        margin-left:20px;
+        flex:1;
+        line-height:80px;
+        font-size:16px;
+        color:#0045af;
+      }
+      p:nth-child(2){
+        margin:20px;
+        width:80px;
+      }
+    }
+    .content-box{
+      flex:1;
+      display: flex;
+      padding:20px;
+      ::v-deep .el-input.is-disabled .el-input__inner{
+        background-color: #fff;
+        color: #666;
+        cursor: auto;
+      }
+      ::v-deep .el-textarea.is-disabled .el-textarea__inner{
+        background-color: #fff;
+        color: #666;
+        cursor: auto;
+      }
+      ::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner{
+        background-color: #fff;
+        border-color: #1890ff;
+        cursor: auto;
+      }
+      ::v-deep .el-radio__input.is-disabled.is-checked .el-radio__inner::after{
+        background-color: #1890ff;
+        cursor: auto;
+      }
+      ::v-deep .el-radio__input.is-disabled + span.el-radio__label{
+        color: #666;
+        cursor: auto;
+      }
+    }
+    .button-box{
+      display: flex;
+      padding:20px 0;
+      .null-p{
+        flex:1;
+      }
+      .button-p{
+        width:100px;
+      }
+    }
+  }
+</style>

+ 37 - 0
src/views/iotDevice/monitoringWarning/warningMode/infoPage.vue

@@ -0,0 +1,37 @@
+<template>
+  <div class="warningModeInfoPage">
+
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'infoPage',
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+
+      }
+    },
+    created(){
+
+    },
+    methods(){
+
+    },
+    mounted:{
+
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .warningModeInfoPage{
+    flex:1;
+    display: flex;
+    flex-direction: column;
+    overflow: hidden;
+  }
+</style>