New file |
| | |
| | | <template> |
| | | <div class="s-system-manage"> |
| | | <div class="s-basic-setting"> |
| | | <el-tabs |
| | | id="e-basic-setting" |
| | | v-model="activeName" |
| | | v-loading="loading" |
| | | :element-loading-text="loadingText" |
| | | type="border-card" |
| | | @tab-click="hanleTabClick" |
| | | > |
| | | <el-tab-pane label="信息上报配置" name="device"> |
| | | <div class="divider"> |
| | | 设备基础信息 |
| | | </div> |
| | | <div style="width: 600px"> |
| | | <!-- 设备基础信息设置 --> |
| | | <el-form :model="device" :rules="rules" label-width="80px" ref="device"> |
| | | <el-form-item label="设备ID" prop="devId"> |
| | | <el-input v-model="device.devId" placeholder="请输入36位UUID" size="small"></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="设备编码" prop="code"> |
| | | <el-input v-model="device.code" placeholder="请输入设备编码" size="small"></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="所属企业" prop="company"> |
| | | <el-input v-model="device.company" placeholder="请输入企业名称" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="设备名称" prop="name"> |
| | | <el-input v-model="device.name" placeholder="请输入设备名称" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="设备描述"> |
| | | <el-input type="textarea" v-model="device.desc" size="small"></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item style="text-align: right"> |
| | | <el-button type="primary" @click="submitDeviceInfo" size="small">保存</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | |
| | | <div class="divider"> |
| | | 更新频率配置 |
| | | </div> |
| | | <div style="width: 600px"> |
| | | <!-- 更新频率配置 --> |
| | | <el-form :model="device" ref="inteval"> |
| | | <el-form-item label="设备信息更新间隔"> |
| | | <el-input |
| | | v-model.number="deviceInterval" |
| | | size="small" |
| | | style="width: 60px; margin-left: -300px;" |
| | | ></el-input> |
| | | <el-select |
| | | v-model="deviceUnit" |
| | | placeholder="请选择" |
| | | size="small" |
| | | style="width: 80px" |
| | | @change="resetDevInterval" |
| | | > |
| | | <el-option v-for="item in intervalOptions" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="设备状态更新间隔" prop="code"> |
| | | <el-input |
| | | v-model.number="stateInterval" |
| | | size="small" |
| | | style="width: 60px; margin-left: -300px;" |
| | | ></el-input> |
| | | <el-select |
| | | v-model="stateUnit" |
| | | placeholder="请选择" |
| | | size="small" |
| | | style="width: 80px" |
| | | @change="resetStatInterval" |
| | | > |
| | | <el-option v-for="item in intervalOptions" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item style="float: right"> |
| | | <el-button type="primary" @click="submitIntervalConfig" size="small">保存</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <!-- <el-tab-pane label="上报日志查询" name="logs" > </el-tab-pane> --> |
| | | </el-tabs> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { getDevInfo, setDevInfo, getInterval, setInterval } from "./api" |
| | | |
| | | import { isPort, isIPv4 } from "@/scripts/validate" |
| | | export default { |
| | | name: "dataReport", |
| | | directives: { |
| | | focus: { |
| | | inserted: function(el) { |
| | | el.querySelector("input").focus() |
| | | } |
| | | } |
| | | }, |
| | | |
| | | data() { |
| | | return { |
| | | activeName: "device", |
| | | loading: false, |
| | | loadingText: "", |
| | | device: {}, |
| | | deviceInterval: 0, |
| | | stateInterval: 0, |
| | | deviceUnit: 1, |
| | | stateUnit: 1, |
| | | rules: { |
| | | devId: [ |
| | | { |
| | | required: true, |
| | | message: "信息不能为空", |
| | | trigger: "change" |
| | | }, |
| | | { trigger: "change" } |
| | | ], |
| | | code: [ |
| | | { |
| | | required: true, |
| | | message: "信息不能为空", |
| | | trigger: "change" |
| | | }, |
| | | { trigger: "change" } |
| | | ], |
| | | company: [ |
| | | { |
| | | required: true, |
| | | message: "信息不能为空", |
| | | trigger: "change" |
| | | }, |
| | | { trigger: "change" } |
| | | ], |
| | | name: [ |
| | | { |
| | | required: true, |
| | | message: "信息不能为空", |
| | | trigger: "change" |
| | | }, |
| | | { trigger: "change" } |
| | | ] |
| | | }, |
| | | intervalOptions: [ |
| | | { |
| | | value: 1, |
| | | label: "分钟" |
| | | }, |
| | | { |
| | | value: 60, |
| | | label: "小时" |
| | | }, |
| | | { |
| | | value: 1440, |
| | | label: "天" |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | watch: { |
| | | stateInterval(val, o) { |
| | | if (this.stateUnit == 1 && val > 60) { |
| | | this.stateInterval = 60 |
| | | } |
| | | |
| | | if (this.stateUnit == 60 && val > 24) { |
| | | this.stateInterval = 24 |
| | | } |
| | | }, |
| | | deviceInterval(val, o) { |
| | | if (this.deviceUnit == 1 && val > 60) { |
| | | this.deviceInterval = 60 |
| | | } |
| | | |
| | | if (this.deviceUnit == 60 && val > 24) { |
| | | this.deviceInterval = 24 |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.initConf() |
| | | }, |
| | | methods: { |
| | | hanleTabClick(tab, event) { |
| | | if (this.activeName == "logs") { |
| | | } |
| | | }, |
| | | |
| | | initConf() { |
| | | getDevInfo().then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | if (rsp.data.id == "") { |
| | | rsp.data.id = "default" |
| | | } |
| | | this.device = rsp.data |
| | | } |
| | | }) |
| | | |
| | | getInterval().then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | let rspDevInteral = rsp.data.devInfo |
| | | let rspStatInteral = rsp.data.DevState |
| | | |
| | | if (rspDevInteral > 1440) { |
| | | this.deviceInterval = rspDevInteral / 1440 |
| | | this.deviceUnit = 1440 |
| | | } else if (rspDevInteral > 60) { |
| | | this.deviceInterval = rspDevInteral / 60 |
| | | this.deviceUnit = 60 |
| | | } else { |
| | | this.deviceInterval = rspDevInteral |
| | | this.deviceUnit = 1 |
| | | } |
| | | |
| | | if (rspStatInteral > 1440) { |
| | | this.stateInterval = rspStatInteral / 1440 |
| | | this.stateUnit = 1440 |
| | | } else if (rspStatInteral > 60) { |
| | | this.stateInterval = rspStatInteral / 60 |
| | | this.stateUnit = 60 |
| | | } else { |
| | | this.stateInterval = rspStatInteral |
| | | this.stateUnit = 1 |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | submitDeviceInfo() { |
| | | this.$refs["device"].validate((valid) => { |
| | | if (valid) { |
| | | setDevInfo(this.device).then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "设置保存成功" |
| | | }) |
| | | this.initConf() |
| | | } |
| | | }) |
| | | } else { |
| | | console.log("error submit!!") |
| | | return false |
| | | } |
| | | }) |
| | | }, |
| | | submitIntervalConfig() { |
| | | let infoIntervalMin = this.deviceInterval * this.deviceUnit |
| | | let statIntervalMin = this.stateInterval * this.stateUnit |
| | | |
| | | setInterval({ id: "default", devInfo: infoIntervalMin, DevState: statIntervalMin }).then((rsp) => { |
| | | if (rsp && rsp.success) { |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "设置保存成功" |
| | | }) |
| | | this.initConf() |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | resetStatInterval() { |
| | | this.stateInterval = 1 |
| | | }, |
| | | resetDevInterval() { |
| | | this.deviceInterval = 1 |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss"> |
| | | .s-system-manage { |
| | | width: 800px; |
| | | // min-width: 800px; |
| | | height: 100%; |
| | | box-sizing: border-box; |
| | | padding: 10px; |
| | | background-color: #f8f9fb; |
| | | .s-system-manage-breadcrumb { |
| | | height: 5%; |
| | | box-sizing: border-box; |
| | | border: 1px solid #e4e7ed; |
| | | box-shadow: #e4e7ed 0px 0px 9px inset; |
| | | box-shadow: #e4e7ed 0px 0px 9px inset; |
| | | border-radius: 5px; |
| | | } |
| | | |
| | | .el-tabs--border-card { |
| | | border: 0px solid #dcdfe6; |
| | | -webkit-box-shadow: none; |
| | | box-shadow: none; |
| | | .el-tabs__header { |
| | | border: 0px solid #dcdfe6; |
| | | .el-tabs__item { |
| | | padding: 5px 50px; |
| | | height: 50px; |
| | | font-family: PingFangSC-Regular; |
| | | font-size: 15px; |
| | | color: #222222; |
| | | text-align: center; |
| | | border: 0px solid transparent; |
| | | } |
| | | .el-tabs__item:nth-child(2) { |
| | | padding-left: 50px !important; |
| | | } |
| | | .el-tabs__item:last-child { |
| | | padding-right: 50px !important; |
| | | } |
| | | .el-tabs__item.is-active { |
| | | color: #3d68e1; |
| | | |
| | | // border-right-color: #fff; |
| | | // border-left-color: #fff; |
| | | } |
| | | .el-tabs__item:not(.is-disabled):hover { |
| | | color: #3d68e1; |
| | | } |
| | | } |
| | | } |
| | | .el-tabs__header { |
| | | margin-bottom: 0; |
| | | } |
| | | .el-tabs__content { |
| | | height: calc(100% - 64px); |
| | | box-sizing: border-box; |
| | | overflow-y: auto; |
| | | padding: 20px 40px !important; |
| | | background: #fff; |
| | | .el-tab-pane { |
| | | width: 100%; |
| | | .s-title { |
| | | text-align: left; |
| | | padding: 15px 0px; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .s-table { |
| | | border: 1px solid #e8e8e9; |
| | | margin-top: 40px; |
| | | } |
| | | |
| | | .el-button--text { |
| | | color: #3d68e1; |
| | | text-decoration: underline; |
| | | } |
| | | |
| | | .divider { |
| | | height: 30px; |
| | | background-color: #eceaf5; |
| | | color: black; |
| | | text-align: left; |
| | | font-weight: 600; |
| | | line-height: 30px; |
| | | padding: 0 10px; |
| | | } |
| | | } |
| | | </style> |