Newer
Older
h2sFront / src / components / homeComp / showConfig.vue
<template>
  <el-dialog title="设备设置" :visible.sync="dialogFormVisible" width="400px" append-to-body>
    <div class="container">
      <el-form ref="dataForm" :rules="rules" :model="Info" label-position="right" label-width="130px">
        <el-form-item :label="'报警阈值('+unitMap[deviceType]+')'" prop="thresholdVol">
          <el-input v-model="Info.thresholdVol" type="text" />
        </el-form-item>
        <el-form-item label="采样间隔(分)" prop="collectInterval">
          <el-input v-model="Info.collectInterval" type="text" />
        </el-form-item>
        <el-form-item label="上传周期(分)" prop="uploadCycle">
          <el-input v-model.number="Info.uploadCycle" type="number" />
        </el-form-item>
        <el-form-item label="重传次数" prop="retryNum">
          <el-input-number v-model.number="Info.retryNum" />
        </el-form-item>
        <el-form-item label="IP地址" prop="IP">
          <el-input v-model="Info.IP" type="text" placeholder="非必填,格式:xxx.xxx.xxx.xxx" />
        </el-form-item>
        <el-form-item label="端口" prop="port">
          <el-input v-model="Info.port" type="text" placeholder="非必填" />
        </el-form-item>
      </el-form>
    </div>
    <template slot="footer">
      <div class="item">
        <el-button type="primary" @click="save">
          确定
        </el-button>
        <el-button @click="close">
          取消
        </el-button>
      </div>
    </template>
  </el-dialog>
</template>

<script>
import { validateFloatPlus } from '@/utils/validate'
import { configWarn } from '@/api/models'
export default {
  // model: {
  //   prop: 'modelVal',//指向props的参数名
  //   event: 'change'//事件名称
  // },
  name: 'ShowConfig',
  props: ['configInfo', 'deviceType'],
  data() {
    const validateIp = (rule, value, callback) => {
      if (value !== '') {
        if ((/((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))/).test(value) === false) {
          callback(new Error('请填写正确的ip地址'))
        } else {
          callback()
        }
      } else {
        // callback(new Error('ip地址不能为空'))
        callback()
      }
    }
    const validatePort = (rule, value, callback) => {
      if (value !== '') {
        if ((/[1-9]$|(^[1-9][0-9]$)|(^[1-9][0-9][0-9]$)|(^[1-9][0-9][0-9][0-9]$)|(^[1-6][0-5][0-5][0-3][0-5]$)/).test(value) === false) {
          callback(new Error('请填写正确的端口号'))
        } else {
          callback()
        }
      } else {
        // callback(new Error('端口号不能为空'))
        callback()
      }
    }
    const validateCollectCycle = (rule, value, callback) => {
      if (value !== '') {
        if (validateFloatPlus(value, 1, 60) === true) {
          callback()
        } else {
          callback(new Error('请填写1到60数值'))
        }
      } else {
        callback(new Error('采样间隔不能为空'))
      }
    }
    const validateUpPeriod = (rule, value, callback) => {
      if (value !== '') {
        if (validateFloatPlus(value, 0, 10080) === true) {
          callback()
        } else {
          callback(new Error('请填写0到10080之间数值'))
        }
      } else {
        callback(new Error('上传周期不能为空'))
      }
    }
    return {
      dialogFormVisible: false,
      unitMap: {
        '23': '%LEL',
        '22': 'ppm',
        '24': 'MPa'
      },
      Info: {
        thresholdVol: '1',
        collectInterval: 10,
        uploadCycle: '7',
        retryNum: '5',
        IP: '',
        port: '',
        id: '24'
      },
      rules: {
        collectInterval: [{ required: true, trigger: ['blur', 'change'], validator: validateCollectCycle }],
        uploadCycle: [{ required: true, trigger: ['blur', 'change'], validator: validateUpPeriod }],
        id: [{ required: true, message: '设备编号不能为空', trigger: ['blur', 'change'] }],
        retryNum: [{ required: true, message: '重传次数不能为空', trigger: ['blur', 'change'] }],
        thresholdVol: [{ required: true, message: '报警阈值不能为空', trigger: ['blur', 'change'] }],
        IP: [{ trigger: ['blur', 'change'], validator: validateIp }],
        port: [{ trigger: ['blur', 'change'], validator: validatePort }]
      } // 前端校验规则
    }
  },
  mounted() {
    this.Info = { ...this.configInfo }
  },
  methods: {
    initDialog() {
      this.dialogFormVisible = true
    },
    close() {
      this.dialogFormVisible = false
      this.$emit('close')
    },
    save() {
      this.$refs['dataForm'].validate((valid) => {
        if (valid) {
          const params = {
            ...this.Info,
            deviceType: this.deviceType
          }
          configWarn(params).then(res => {
            this.$message({
              message: '保存成功',
              type: 'success'
            })
            this.close()
          })
        }
      })
    }
  }
}
</script>

<style scoped>
.container {
  height: 100%;
  width: 100%;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
}

.content {
  width: 203px;
  font-size: 12px;
  top: 50%;
  left: 50%;
  background: #fff;
  padding: 30px 10px;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.item {
  display: flex;
  padding: 5px;
  align-items: center;
  width: 100%;
}

.item > div {
  flex: 1;
  padding: 0 3px;
  text-align: right;
}

.inp {
  flex: 2 !important;
  display: flex;
  text-align: left;
}

input {
  width: 100%;
  outline: none;
  border: 1px solid;
}

.btn {
  display: block;
  height: 18px;
  width: 100%;
  background: skyblue;
  border-radius: 4px;
  color: #fff;
  text-align: center !important;
  line-height: 18px;
  margin: 0 3px;

}
</style>