| | |
| | | <template> |
| | | <el-card style="margin: 6px; padding-bottom: 100px"> |
| | | <el-card style="margin: 6px;width:calc(100% - 12px); height: calc(100% - 12px);position:absolute; "> |
| | | <el-tabs v-model="activeName" tab-position="left" @tab-click="tabChange" style="padding: 10px; min-height: 400px"> |
| | | <el-tab-pane name="basic"> |
| | | <span slot="label">* åºæ¬ä¿¡æ¯</span> |
| | | |
| | | <div style="width:100%; display:flex"> |
| | | <div class="leftCount"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
| | | <el-row :gutter="100"> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8"> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12"> |
| | | <el-form-item label="设å¤åç§°" prop="deviceName"> |
| | | <el-input v-model="form.deviceName" placeholder="请è¾å
¥è®¾å¤åç§°"> |
| | | <el-button slot="append" @click="openSummaryDialog" v-if="form.deviceId != 0">æè¦</el-button> |
| | |
| | | <span style="color: red">*</span> |
| | | 设å¤ç¼å· |
| | | </template> |
| | | <el-input v-model="form.serialNumber" placeholder="请è¾å
¥è®¾å¤ç¼å·" :disabled="form.status !== 1" maxlength="32"> |
| | | <el-input v-model="form.serialNumber" placeholder="请è¾å
¥è®¾å¤ç¼å·" :disabled="form.status !== 1" |
| | | maxlength="32"> |
| | | <el-button slot="append" @click="generateNum" :loading="genDisabled" |
| | | :disabled="form.status !== 1">çæ</el-button> |
| | | </el-input> |
| | |
| | | </el-form-item> |
| | | <el-form-item v-if="openTip"> |
| | | <template> |
| | | <el-alert type="success" show-icon description="å½åéæ©ç产åå±äºmodbusåè®®,å°å¨ç½å
³è®¾å¤åå»ºåæ ¹æ®ééç¹æ¨¡æ¿çæå设å¤"></el-alert> |
| | | <el-alert type="success" show-icon |
| | | description="å½åéæ©ç产åå±äºmodbusåè®®,å°å¨ç½å
³è®¾å¤åå»ºåæ ¹æ®ééç¹æ¨¡æ¿çæå设å¤"></el-alert> |
| | | </template> |
| | | </el-form-item> |
| | | <el-form-item label="åºä»¶çæ¬" prop="firmwareVersion"> |
| | |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="模æè®¾å¤" prop="isSimulate"> |
| | | <el-switch v-model="form.isSimulate" active-text="" inactive-text="" :active-value="1" :inactive-value="0" |
| | | :disabled="form.deviceType === 3"></el-switch> |
| | | <el-switch v-model="form.isSimulate" active-text="" inactive-text="" :active-value="1" |
| | | :inactive-value="0" :disabled="form.deviceType === 3"></el-switch> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤å½±å" prop="isShadow"> |
| | | <el-switch v-model="form.isShadow" active-text="" inactive-text="" :active-value="1" :inactive-value="0" |
| | | :disabled="form.deviceType === 3"></el-switch> |
| | | <el-switch v-model="form.isShadow" active-text="" inactive-text="" :active-value="1" |
| | | :inactive-value="0" :disabled="form.deviceType === 3"></el-switch> |
| | | </el-form-item> |
| | | <el-form-item label="ç¦ç¨è®¾å¤" prop="deviceStatus"> |
| | | <el-switch v-model="deviceStatus" active-text="" inactive-text="" |
| | |
| | | <el-input v-model="form.remark" type="textarea" placeholder="请è¾å
¥å
容" rows="1" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8"> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12"> |
| | | <el-form-item label="å®ä½æ¹å¼" prop="locationWay"> |
| | | <el-select v-model="form.locationWay" placeholder="è¯·éæ©è®¾å¤ç¶æ" clearable size="small" style="width: 100%" |
| | | :disabled="form.deviceType === 3"> |
| | | <el-select v-model="form.locationWay" placeholder="è¯·éæ©è®¾å¤ç¶æ" clearable size="small" |
| | | style="width: 100%" :disabled="form.deviceType === 3"> |
| | | <el-option v-for="dict in dict.type.iot_location_way" :key="dict.value" :label="dict.label" |
| | | :value="Number(dict.value)" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤ç»åº¦" prop="longitude"> |
| | | <el-input v-model="form.longitude" placeholder="请è¾å
¥è®¾å¤ç»åº¦" type="number" :disabled="form.locationWay != 3"> |
| | | <el-link slot="append" :underline="false" href="https://api.map.baidu.com/lbsapi/getpoint/index.html" |
| | | target="_blank" :disabled="form.locationWay != 3">åæ æ¾å</el-link> |
| | | <el-input v-model="form.longitude" placeholder="请è¾å
¥è®¾å¤ç»åº¦" type="number" |
| | | :disabled="form.locationWay != 3"> |
| | | <el-link slot="append" :underline="false" |
| | | href="https://api.map.baidu.com/lbsapi/getpoint/index.html" target="_blank" |
| | | :disabled="form.locationWay != 3">åæ æ¾å</el-link> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤çº¬åº¦" prop="latitude"> |
| | | <el-input v-model="form.latitude" placeholder="请è¾å
¥è®¾å¤çº¬åº¦" type="number" :disabled="form.locationWay != 3"> |
| | | <el-link slot="append" :underline="false" href="https://api.map.baidu.com/lbsapi/getpoint/index.html" |
| | | target="_blank" :disabled="form.locationWay != 3">åæ æ¾å</el-link> |
| | | <el-input v-model="form.latitude" placeholder="请è¾å
¥è®¾å¤çº¬åº¦" type="number" |
| | | :disabled="form.locationWay != 3"> |
| | | <el-link slot="append" :underline="false" |
| | | href="https://api.map.baidu.com/lbsapi/getpoint/index.html" target="_blank" |
| | | :disabled="form.locationWay != 3">åæ æ¾å</el-link> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æå¨å°å" prop="networkAddress"> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="æ¿æ´»æ¶é´" prop="activeTime"> |
| | | <el-date-picker clearable v-model="form.activeTime" type="date" value-format="yyyy-MM-dd" |
| | | placeholder="è®¾å¤æ¿æ´»æ¶é´" disabled style="width: 100%"></el-date-picker> |
| | | placeholder="è®¾å¤æ¿æ´»æ¶é´" disabled |
| | | style="width: 100%"></el-date-picker>http://localhost:82/iot/template |
| | | </el-form-item> |
| | | <el-form-item label="设å¤ä¿¡å·" prop="rssi"> |
| | | <el-input v-model="form.rssi" placeholder="设å¤ä¿¡å·å¼ºåº¦" disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="è®¾å¤æ¨¡å" prop="modeUrl"> |
| | | <el-select placeholder="è¯·éæ©è®¾å¤æ¨¡å" v-model="modeUrl" @change="changeSelect" size="small" |
| | | style="width: 100%"> |
| | | <el-option v-for="(item, index) in modelOption" :key="item.id" :label="item.name" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å
¶ä»ä¿¡æ¯" prop="remark" v-if="form.deviceId != 0"> |
| | | <dict-tag :options="dict.type.iot_device_status" :value="form.status" |
| | |
| | | <el-button size="small" @click="openCodeDialog()">äºç»´ç </el-button> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8" v-if="form.deviceId != 0"> |
| | | <div |
| | | style="border: 1px solid #dfe4ed; border-radius: 5px; padding: 5px; text-align: center; line-height: 400px"> |
| | | <div id="map" style="height: 435px; width: 100%">å°å¾å±ç¤ºåºåï¼æ°å¢åæ¾ç¤º</div> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="8" v-if="form.deviceId != 0"> |
| | | |
| | | |
| | | </el-col> --> |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <el-form label-width="100px" style="margin-top: 50px"> |
| | | <el-form-item style="text-align: center; margin-left: -100px; margin-top: 10px"> |
| | | <el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:edit']" v-show="form.deviceId != 0">ä¿® |
| | | <el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:edit']" |
| | | v-show="form.deviceId != 0">ä¿® |
| | | æ¹</el-button> |
| | | <el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:add']" v-show="form.deviceId == 0">æ° |
| | | <el-button type="primary" @click="submitForm" v-hasPermi="['iot:device:add']" |
| | | v-show="form.deviceId == 0">æ° |
| | | å¢</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div class="rightCount"> |
| | | <div class="contebtBoder"> |
| | | <div id="map" style="height:100%; width: 100%">å°å¾å±ç¤ºåºåï¼æ°å¢åæ¾ç¤º</div> |
| | | </div> |
| | | <div class="contebtBoder" style="margin-top: 20px;"> |
| | | <three-js :someData="someData"></three-js> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | <!-- éæ©äº§å --> |
| | | <product-list ref="productList" :productId="form.productId" @productEvent="getProductData($event)" /> |
| | |
| | | import business from "@/views/iot/business/index.vue"; |
| | | import vueQr from 'vue-qr'; |
| | | import { loadBMap } from '@/utils/map.js'; |
| | | import { deviceSynchronization, getDevice, addDevice, updateDevice, generatorDeviceNum, listDevice, getMqttConnect } from '@/api/iot/device'; |
| | | import { |
| | | deviceSynchronization, getDevice, addDevice, updateDevice, |
| | | generatorDeviceNum, listDevice, getMqttConnect, modelSelectPublishes, |
| | | setModelInsertModel, setModelSelectModelByPage |
| | | } from '@/api/iot/device'; |
| | | import { getDeviceRunningStatus } from '@/api/iot/device'; |
| | | import { cacheJsonThingsModel } from '@/api/iot/model'; |
| | | import { getDeviceTemp } from '@/api/iot/temp'; |
| | | import threeJs from '../../threeJs/index.vue' |
| | | |
| | | export default { |
| | | name: 'DeviceEdit', |
| | |
| | | deviceTimer, |
| | | JsonViewer, |
| | | vueQr, |
| | | threeJs |
| | | }, |
| | | watch: { |
| | | activeName(val) { |
| | |
| | | serialNumber: '', |
| | | deviceType: 1, |
| | | isSimulate: 0, |
| | | |
| | | }, |
| | | modeUrl: null, |
| | | //mqttåæ°æ¥ç |
| | | listQuery: { |
| | | clientId: 0, |
| | |
| | | ], |
| | | }, |
| | | isMediaDevice: false, |
| | | modelOption: [], |
| | | someData: null, showModelLayer: false, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getListSource(); |
| | | let activeName = this.$route.query.activeName; |
| | | if (activeName != null && activeName != '') { |
| | | this.activeName = activeName; |
| | |
| | | this.mqttUnSubscribe(this.form); |
| | | }, |
| | | methods: { |
| | | // Js |
| | | changeSelect() { |
| | | this.$forceUpdate() // 强å¶å·æ° |
| | | }, |
| | | getListSource() { |
| | | modelSelectPublishes({ |
| | | name: '', |
| | | type: '' |
| | | }).then((response) => { |
| | | if (response.code == 200) { |
| | | if (response.data) { |
| | | |
| | | this.modelOption = response.data; |
| | | } else { |
| | | |
| | | this.modelOption = []; |
| | | } |
| | | } else { |
| | | this.$message('æ¨¡åæ°æ®å表è·å失败ã'); |
| | | } |
| | | }) |
| | | }, |
| | | /* è¿æ¥Mqttæ¶æ¯æå¡å¨ */ |
| | | async connectMqtt() { |
| | | if (this.$mqttTool.client == null) { |
| | |
| | | }, |
| | | /**è·å设å¤è¯¦æ
*/ |
| | | getDevice(deviceId) { |
| | | |
| | | getDevice(deviceId).then(async (response) => { |
| | | // å享设å¤è·åç¨æ·æé |
| | | response.data.userPerms = []; |
| | |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | if (this.form.deviceId != 0) { |
| | | updateDevice(this.form).then((response) => { |
| | | if (response.data == 0) { |
| | | this.$modal.alertError(response.msg); |
| | | this.setEditDevice(); |
| | | } else { |
| | | this.$modal.alertSuccess('ä¿®æ¹æå'); |
| | | this.form = JSON.parse(JSON.stringify(this.form)); |
| | | this.loadMap(); |
| | | |
| | | this.setAddDevice(); |
| | | } |
| | | } |
| | | }); |
| | | } else { |
| | | }, |
| | | setAddDevice() { |
| | | const modeUrl = this.modeUrl; |
| | | const modeName = this.form.deviceName; |
| | | addDevice(this.form).then(async (response) => { |
| | | // è·å设å¤ç¶æ |
| | | await this.getDeviceStatusWitchThingsModel(response); |
| | |
| | | if (this.form.status == 2) { |
| | | this.deviceStatus = 1; |
| | | } |
| | | |
| | | if (modeUrl && response.data.deviceId) { |
| | | this.setAddmodelToDevice(modeName, modeUrl, response.data.deviceId); |
| | | } |
| | | this.$modal.alertSuccess('æ·»å è®¾å¤æå'); |
| | | this.loadMap(); |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | setEditDevice() { |
| | | updateDevice(this.form).then((response) => { |
| | | if (response.data == 0) { |
| | | this.$modal.alertError(response.msg); |
| | | } else { |
| | | this.$modal.alertSuccess('ä¿®æ¹æå'); |
| | | this.form = JSON.parse(JSON.stringify(this.form)); |
| | | this.loadMap(); |
| | | } |
| | | }); |
| | | }, |
| | | setAddmodelToDevice(modeName, layerId, deviceId) { |
| | | |
| | | setModelInsertModel({ |
| | | "deviceid": deviceId, |
| | | "layerid": layerId, |
| | | "name": modeName |
| | | }).then(response => { |
| | | |
| | | }) |
| | | }, |
| | | |
| | | |
| | | |
| | | /** è·å设å¤ç¶æåç©æ¨¡å **/ |
| | | async getDeviceStatusWitchThingsModel(response) { |
| | | // è·åç¼åç©æ¨¡å |
| | |
| | | // æ ¼å¼åç©æ¨¡åï¼æååºçæµå¼,æ°ç»æ·»å åç¼ |
| | | this.formatThingsModel(response.data); |
| | | this.form = response.data; |
| | | |
| | | |
| | | |
| | | // è§£æè®¾å¤æè¦ |
| | | if (this.form.summary != null && this.form.summary != '') { |
| | | this.summary = JSON.parse(this.form.summary); |
| | |
| | | //Mqtt订é
|
| | | this.connectMqtt(); |
| | | this.mqttSubscribe(this.form); |
| | | |
| | | this.$nextTick(() => { |
| | | this.getModelURL(response.data.deviceId) |
| | | }) |
| | | |
| | | }, |
| | | getModelURL(res) { |
| | | |
| | | setModelSelectModelByPage({ |
| | | deviceid: res, |
| | | pageIndex: 1, |
| | | pageSize: 10 |
| | | }).then(response => { |
| | | if (response.code != 200 || response.data.length <= 0) return |
| | | const id = response.data[0].layerid; |
| | | this.modeUrl = id |
| | | if (this.modeUrl) { |
| | | const obj = this.modelOption.filter(item => { |
| | | if (item.id == id) { |
| | | return item |
| | | } |
| | | }) |
| | | if (obj.length > 0) { |
| | | |
| | | this.showModelLayer = true; |
| | | this.$nextTick(()=>{ |
| | | this.someData = obj[0].url |
| | | }) |
| | | |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | /**éæ©äº§å */ |
| | | selectProduct() { |
| | |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .leftCount { |
| | | flex: 1 |
| | | } |
| | | |
| | | .rightCount { |
| | | width: 30%; |
| | | height: 100%; |
| | | padding-left: 20px; |
| | | |
| | | .contebtBoder { |
| | | border: 1px solid #dfe4ed; |
| | | border-radius: 5px; |
| | | padding: 5px; |
| | | text-align: center; |
| | | line-height: 400px; |
| | | height: 390px; |
| | | position: relative; |
| | | } |
| | | |
| | | } |
| | | </style> |