Przeglądaj źródła

* 静态设备状态属性

chen.cheng 1 miesiąc temu
rodzic
commit
bba5ecca86

+ 76 - 39
ems-ui-cloud/src/views/adapter/cdz/index.vue

@@ -22,7 +22,8 @@
             >
               <el-form-item label="设备分类" prop="deviceSubCategory">
                 <el-select v-model="queryParams.deviceSubCategory">
-                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
                              :key="item.code"
                   />
                 </el-select>
@@ -61,7 +62,8 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
                            v-hasPermi="['ems:device:remove']"
                 >删除
                 </el-button>
@@ -80,12 +82,13 @@
             <!--分页-->
             <div class="button-group-container">
               <el-button-group>
-                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
               </el-button-group>
             </div>
 
-            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
               <el-table-column type="selection" width="55" align="center"/>
               <el-table-column label="设备名称" align="left" prop="deviceName"/>
               <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
@@ -119,7 +122,7 @@
               </el-table-column>
             </el-table>
 
-            <div v-else-if="istable === 2" >
+            <div v-else-if="istable === 2">
               <el-row :gutter="20" class="device-list">
                 <el-col v-for="device in deviceList" :key="device.id" :span="6">
                   <div :class="`device-card ${backStyle(device.areaPath)}`">
@@ -135,9 +138,12 @@
                       <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
                     </div>
                     <div class="device-footer">
-                      <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
                       <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                      <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
                     </div>
                   </div>
                 </el-col>
@@ -326,7 +332,8 @@
                     </el-form-item>
                     <el-form-item label="工艺标签代码" prop="psCode">
                       <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
                       </el-select>
                     </el-form-item>
                     <el-form-item label="外系统部件编码" prop="extCompoCode">
@@ -378,7 +385,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -430,21 +446,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -490,7 +505,27 @@ export default {
       subCategoryOptions: undefined,
       subsystemOptions: undefined,
       devOptions: undefined,
-
+      statusAttr: [{
+        attr: '充电功率',
+        attrUnit: 'kW',
+        attrValue: '20'
+      },
+        {
+          attr: '充电电量',
+          attrUnit: 'kW·h',
+          attrValue: '10'
+        },
+        {
+          attr: '充电次数',
+          attrUnit: '次',
+          attrValue: '200'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        }
+      ],
       defaultProps: {
         children: 'children',
         label: 'label'
@@ -518,9 +553,9 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
@@ -535,27 +570,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +653,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +694,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -930,7 +965,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1128,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,7 +1165,7 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
@@ -1147,10 +1182,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }
 

+ 76 - 40
ems-ui-cloud/src/views/adapter/devc/index.vue

@@ -22,7 +22,8 @@
             >
               <el-form-item label="设备分类" prop="deviceSubCategory">
                 <el-select v-model="queryParams.deviceSubCategory">
-                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
                              :key="item.code"
                   />
                 </el-select>
@@ -61,7 +62,8 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
                            v-hasPermi="['ems:device:remove']"
                 >删除
                 </el-button>
@@ -80,12 +82,13 @@
             <!--分页-->
             <div class="button-group-container">
               <el-button-group>
-                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
               </el-button-group>
             </div>
 
-            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
               <el-table-column type="selection" width="55" align="center"/>
               <el-table-column label="设备名称" align="left" prop="deviceName"/>
               <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
@@ -119,7 +122,7 @@
               </el-table-column>
             </el-table>
 
-            <div v-else-if="istable === 2" >
+            <div v-else-if="istable === 2">
               <el-row :gutter="20" class="device-list">
                 <el-col v-for="device in deviceList" :key="device.id" :span="6">
                   <div :class="`device-card ${backStyle(device.areaPath)}`">
@@ -135,9 +138,12 @@
                       <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
                     </div>
                     <div class="device-footer">
-                      <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
                       <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                      <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
                     </div>
                   </div>
                 </el-col>
@@ -326,7 +332,8 @@
                     </el-form-item>
                     <el-form-item label="工艺标签代码" prop="psCode">
                       <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
                       </el-select>
                     </el-form-item>
                     <el-form-item label="外系统部件编码" prop="extCompoCode">
@@ -378,7 +385,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -430,21 +446,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -518,16 +533,36 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
       attrData: [],
       abilityData: [],
       eventData: [],
-
+      statusAttr: [{
+        attr: '运行参数',
+        attrUnit: '',
+        attrValue: '{timeout:3000}'
+      },
+        {
+          attr: '设备数量',
+          attrUnit: '',
+          attrValue: '10'
+        },
+        {
+          attr: '设备控制',
+          attrUnit: '',
+          attrValue: '否'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        }
+      ],
       // 表单参数
       form: {
         customAttrs: [] // 自定义属性数组
@@ -535,27 +570,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +653,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +694,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -930,7 +965,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1128,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,12 +1165,11 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
   height: 200px;
-  width: 350px;
   margin-bottom: 20px;
   display: flex;
   flex-direction: column;
@@ -1148,10 +1182,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }
 

+ 98 - 61
ems-ui-cloud/src/views/adapter/gcc/index.vue

@@ -22,7 +22,8 @@
             >
               <el-form-item label="设备分类" prop="deviceSubCategory">
                 <el-select v-model="queryParams.deviceSubCategory">
-                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
                              :key="item.code"
                   />
                 </el-select>
@@ -61,7 +62,8 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
                            v-hasPermi="['ems:device:remove']"
                 >删除
                 </el-button>
@@ -80,12 +82,13 @@
             <!--分页-->
             <div class="button-group-container">
               <el-button-group>
-                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
               </el-button-group>
             </div>
 
-            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
               <el-table-column type="selection" width="55" align="center"/>
               <el-table-column label="设备名称" align="left" prop="deviceName"/>
               <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
@@ -119,7 +122,7 @@
               </el-table-column>
             </el-table>
 
-            <div v-else-if="istable === 2" >
+            <div v-else-if="istable === 2">
               <el-row :gutter="20" class="device-list">
                 <el-col v-for="device in deviceList" :key="device.id" :span="6">
                   <div :class="`device-card ${backStyle(device.areaPath)}`">
@@ -135,9 +138,12 @@
                       <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
                     </div>
                     <div class="device-footer">
-                      <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
                       <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                      <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
                     </div>
                   </div>
                 </el-col>
@@ -187,10 +193,10 @@
                 <el-form-item label="设备模型" prop="deviceModel">
                   <el-select v-model="form.deviceModel" style="width:100%" @change="handleModelChange">
                     <el-option
-                        v-for="item in modelList"
-                        :label="item.modelName"
-                        :value="item.modelCode"
-                        :key="item.modelCode"
+                      v-for="item in modelList"
+                      :label="item.modelName"
+                      :value="item.modelCode"
+                      :key="item.modelCode"
                     />
                   </el-select>
                 </el-form-item>
@@ -202,10 +208,10 @@
                       <span class="attr-name">{{ attr.attrName }} ({{ attr.attrUnit }}):</span>
                       <!-- 使用 el-input 组件允许用户编辑属性值 -->
                       <el-input
-                          v-model="attrValuesMap[attr.attrKey]"
-                          placeholder="点击编辑"
-                          size="small"
-                          @blur="updateAttrValue(attr.attrKey, attrValuesMap[attr.attrKey])"
+                        v-model="attrValuesMap[attr.attrKey]"
+                        placeholder="点击编辑"
+                        size="small"
+                        @blur="updateAttrValue(attr.attrKey, attrValuesMap[attr.attrKey])"
                       >
                       </el-input>
                     </li>
@@ -326,7 +332,8 @@
                     </el-form-item>
                     <el-form-item label="工艺标签代码" prop="psCode">
                       <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
                       </el-select>
                     </el-form-item>
                     <el-form-item label="外系统部件编码" prop="extCompoCode">
@@ -378,7 +385,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -430,21 +446,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -490,7 +505,27 @@ export default {
       subCategoryOptions: undefined,
       subsystemOptions: undefined,
       devOptions: undefined,
-
+      statusAttr: [{
+        attr: '发电量',
+        attrUnit: 'kW·h',
+        attrValue: '20'
+      },
+        {
+          attr: '储电量',
+          attrUnit: 'kW·h',
+          attrValue: '10'
+        },
+        {
+          attr: '发电总量',
+          attrUnit: 'kW·h',
+          attrValue: '200'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        }
+      ],
       defaultProps: {
         children: 'children',
         label: 'label'
@@ -518,9 +553,9 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
@@ -535,27 +570,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +653,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +694,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -887,13 +922,13 @@ export default {
 
             if (dataToSubmit.length > 0) {
               addAttrValueBatch(dataToSubmit)
-                  .then(response => {
-                    if (response.code === 200) {
-                      this.$message.success('属性添加成功')
-                    } else {
-                      this.$message.error('属性添加失败')
-                    }
-                  }).catch(error => {
+                .then(response => {
+                  if (response.code === 200) {
+                    this.$message.success('属性添加成功')
+                  } else {
+                    this.$message.error('属性添加失败')
+                  }
+                }).catch(error => {
                 console.error('属性添加失败:', error)
                 this.$message.error('属性添加失败')
               })
@@ -910,13 +945,13 @@ export default {
 
             if (dataToSubmit.length > 0) {
               addAttrValueBatch(dataToSubmit)
-                  .then(response => {
-                    if (response.code === 200) {
-                      this.$message.success('属性添加成功')
-                    } else {
-                      this.$message.error('属性添加失败')
-                    }
-                  }).catch(error => {
+                .then(response => {
+                  if (response.code === 200) {
+                    this.$message.success('属性添加成功')
+                  } else {
+                    this.$message.error('属性添加失败')
+                  }
+                }).catch(error => {
                 console.error('属性添加失败:', error)
                 this.$message.error('属性添加失败')
               })
@@ -930,7 +965,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1128,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,7 +1165,7 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
@@ -1147,10 +1182,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }
 

+ 93 - 61
ems-ui-cloud/src/views/adapter/gczr/index.vue

@@ -22,7 +22,8 @@
             >
               <el-form-item label="设备分类" prop="deviceSubCategory">
                 <el-select v-model="queryParams.deviceSubCategory">
-                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
                              :key="item.code"
                   />
                 </el-select>
@@ -61,7 +62,8 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
                            v-hasPermi="['ems:device:remove']"
                 >删除
                 </el-button>
@@ -80,12 +82,13 @@
             <!--分页-->
             <div class="button-group-container">
               <el-button-group>
-                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
               </el-button-group>
             </div>
 
-            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
               <el-table-column type="selection" width="55" align="center"/>
               <el-table-column label="设备名称" align="left" prop="deviceName"/>
               <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
@@ -119,7 +122,7 @@
               </el-table-column>
             </el-table>
 
-            <div v-else-if="istable === 2" >
+            <div v-else-if="istable === 2">
               <el-row :gutter="20" class="device-list">
                 <el-col v-for="device in deviceList" :key="device.id" :span="6">
                   <div :class="`device-card ${backStyle(device.areaPath)}`">
@@ -135,9 +138,12 @@
                       <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
                     </div>
                     <div class="device-footer">
-                      <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
                       <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                      <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
                     </div>
                   </div>
                 </el-col>
@@ -187,10 +193,10 @@
                 <el-form-item label="设备模型" prop="deviceModel">
                   <el-select v-model="form.deviceModel" style="width:100%" @change="handleModelChange">
                     <el-option
-                        v-for="item in modelList"
-                        :label="item.modelName"
-                        :value="item.modelCode"
-                        :key="item.modelCode"
+                      v-for="item in modelList"
+                      :label="item.modelName"
+                      :value="item.modelCode"
+                      :key="item.modelCode"
                     />
                   </el-select>
                 </el-form-item>
@@ -202,10 +208,10 @@
                       <span class="attr-name">{{ attr.attrName }} ({{ attr.attrUnit }}):</span>
                       <!-- 使用 el-input 组件允许用户编辑属性值 -->
                       <el-input
-                          v-model="attrValuesMap[attr.attrKey]"
-                          placeholder="点击编辑"
-                          size="small"
-                          @blur="updateAttrValue(attr.attrKey, attrValuesMap[attr.attrKey])"
+                        v-model="attrValuesMap[attr.attrKey]"
+                        placeholder="点击编辑"
+                        size="small"
+                        @blur="updateAttrValue(attr.attrKey, attrValuesMap[attr.attrKey])"
                       >
                       </el-input>
                     </li>
@@ -326,7 +332,8 @@
                     </el-form-item>
                     <el-form-item label="工艺标签代码" prop="psCode">
                       <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
                       </el-select>
                     </el-form-item>
                     <el-form-item label="外系统部件编码" prop="extCompoCode">
@@ -378,7 +385,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -430,21 +446,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -490,7 +505,22 @@ export default {
       subCategoryOptions: undefined,
       subsystemOptions: undefined,
       devOptions: undefined,
-
+      statusAttr: [{
+        attr: '输入量',
+        attrUnit: 'kW·h',
+        attrValue: '20'
+      },
+        {
+          attr: '输出量',
+          attrUnit: 'kW·h',
+          attrValue: '10'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        }
+      ],
       defaultProps: {
         children: 'children',
         label: 'label'
@@ -518,9 +548,9 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
@@ -535,27 +565,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +648,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +689,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -887,13 +917,13 @@ export default {
 
             if (dataToSubmit.length > 0) {
               addAttrValueBatch(dataToSubmit)
-                  .then(response => {
-                    if (response.code === 200) {
-                      this.$message.success('属性添加成功')
-                    } else {
-                      this.$message.error('属性添加失败')
-                    }
-                  }).catch(error => {
+                .then(response => {
+                  if (response.code === 200) {
+                    this.$message.success('属性添加成功')
+                  } else {
+                    this.$message.error('属性添加失败')
+                  }
+                }).catch(error => {
                 console.error('属性添加失败:', error)
                 this.$message.error('属性添加失败')
               })
@@ -910,13 +940,13 @@ export default {
 
             if (dataToSubmit.length > 0) {
               addAttrValueBatch(dataToSubmit)
-                  .then(response => {
-                    if (response.code === 200) {
-                      this.$message.success('属性添加成功')
-                    } else {
-                      this.$message.error('属性添加失败')
-                    }
-                  }).catch(error => {
+                .then(response => {
+                  if (response.code === 200) {
+                    this.$message.success('属性添加成功')
+                  } else {
+                    this.$message.error('属性添加失败')
+                  }
+                }).catch(error => {
                 console.error('属性添加失败:', error)
                 this.$message.error('属性添加失败')
               })
@@ -930,7 +960,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1123,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,7 +1160,7 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
@@ -1147,10 +1177,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }
 

+ 36 - 2
ems-ui-cloud/src/views/adapter/hm/index.vue

@@ -378,7 +378,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -527,7 +536,32 @@ export default {
       attrData: [],
       abilityData: [],
       eventData: [],
-
+      statusAttr: [{
+        attr: '蓄水量',
+        attrUnit: 'm³',
+        attrValue: '20'
+      },
+        {
+          attr: '温度',
+          attrUnit: '℃',
+          attrValue: '10'
+        },
+        {
+          attr: '湿度',
+          attrUnit: '',
+          attrValue: '95%'
+        },
+        {
+          attr: '调蓄量',
+          attrUnit: 'm³',
+          attrValue: '10'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        }
+      ],
       // 表单参数
       form: {
         customAttrs: [] // 自定义属性数组

+ 26 - 2
ems-ui-cloud/src/views/adapter/ljcy/index.vue

@@ -378,7 +378,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -527,7 +536,22 @@ export default {
       attrData: [],
       abilityData: [],
       eventData: [],
-
+      statusAttr: [{
+        attr: '真空输送量',
+        attrUnit: 't/h',
+        attrValue: '1'
+      },
+        {
+          attr: '生化处理量',
+          attrUnit: 't/h',
+          attrValue: '1.3'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        }
+      ],
       // 表单参数
       form: {
         customAttrs: [] // 自定义属性数组

+ 76 - 39
ems-ui-cloud/src/views/adapter/nhjc/index.vue

@@ -22,7 +22,8 @@
             >
               <el-form-item label="设备分类" prop="deviceSubCategory">
                 <el-select v-model="queryParams.deviceSubCategory">
-                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
                              :key="item.code"
                   />
                 </el-select>
@@ -61,7 +62,8 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
                            v-hasPermi="['ems:device:remove']"
                 >删除
                 </el-button>
@@ -80,12 +82,13 @@
             <!--分页-->
             <div class="button-group-container">
               <el-button-group>
-                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
               </el-button-group>
             </div>
 
-            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
               <el-table-column type="selection" width="55" align="center"/>
               <el-table-column label="设备名称" align="left" prop="deviceName"/>
               <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
@@ -119,7 +122,7 @@
               </el-table-column>
             </el-table>
 
-            <div v-else-if="istable === 2" >
+            <div v-else-if="istable === 2">
               <el-row :gutter="20" class="device-list">
                 <el-col v-for="device in deviceList" :key="device.id" :span="6">
                   <div :class="`device-card ${backStyle(device.areaPath)}`">
@@ -135,9 +138,12 @@
                       <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
                     </div>
                     <div class="device-footer">
-                      <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
                       <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                      <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
                     </div>
                   </div>
                 </el-col>
@@ -326,7 +332,8 @@
                     </el-form-item>
                     <el-form-item label="工艺标签代码" prop="psCode">
                       <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
                       </el-select>
                     </el-form-item>
                     <el-form-item label="外系统部件编码" prop="extCompoCode">
@@ -378,7 +385,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -430,21 +446,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -518,16 +533,36 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
       attrData: [],
       abilityData: [],
       eventData: [],
-
+      statusAttr: [{
+        attr: '用能',
+        attrUnit: 'kW',
+        attrValue: '10'
+      },
+        {
+          attr: '能耗',
+          attrUnit: 'kW·h',
+          attrValue: '20'
+        },
+        {
+          attr: '趋势',
+          attrUnit: '',
+          attrValue: '上升'
+        },
+        {
+          attr: '能耗排名',
+          attrUnit: '',
+          attrValue: '1'
+        }
+      ],
       // 表单参数
       form: {
         customAttrs: [] // 自定义属性数组
@@ -535,27 +570,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +653,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +694,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -930,7 +965,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1128,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,7 +1165,7 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
@@ -1147,10 +1182,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }
 

+ 438 - 394
ems-ui-cloud/src/views/adapter/pv/index.vue

@@ -16,413 +16,430 @@
       </el-col>
       <el-col :span="20" :xs="24">
         <div class="contents">
-        <div class="other-content">
-        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
-                 label-width="68px"
-        >
-          <el-form-item label="设备分类" prop="deviceSubCategory">
-            <el-select v-model="queryParams.deviceSubCategory">
-              <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
-                         :key="item.code"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="归属设施" prop="refFacs">
-            <el-select v-model="queryParams.refFacs">
-              <el-option v-for="item in facsOptions" :label="item.facsName" :value="item.facsCode"
-                         :key="item.facsCode"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="子系统" prop="subsystemCode">
-            <el-select v-model="queryParams.subsystemCode">
-              <el-option v-for="item in subsystemOptions" :label="item.systemName" :value="item.systemCode"
-                         :key="item.systemCode"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item>
-            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-          </el-form-item>
-        </el-form>
-
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="1.5">
-            <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
-                       v-hasPermi="['ems:device:add']"
-            >新增
-            </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
-                       v-hasPermi="['ems:device:edit']"
-            >修改
-            </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
-                       v-hasPermi="['ems:device:remove']"
-            >删除
-            </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
-                       v-hasPermi="['ems:device:export']"
-            >导出
-            </el-button>
-          </el-col>
-          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-        </el-row>
-        </div>
-
-        <div class="table-content">
-     <!--分页-->
-          <div class="button-group-container">
-            <el-button-group>
-              <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-              <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
-            </el-button-group>
-          </div>
-
-        <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
-          <el-table-column type="selection" width="55" align="center"/>
-          <el-table-column label="设备名称" align="left" prop="deviceName"/>
-          <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
-          <el-table-column label="归属设施" align="center" prop="refFacsName"/>
-          <el-table-column label="设备分类" align="center" prop="deviceCategoryName"/>
-          <el-table-column label="子系统" align="center" prop="subsystemName"/>
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-            <template slot-scope="scope">
-              <el-button size="mini" type="text" icon="el-icon-info" @click="handleDevProcess(scope.row)"
-                         v-hasPermi="['basecfg:device:edit']" v-if="shouldShowDevProcessButton(scope.row)"
-              >
-                器件
-              </el-button>
-              <el-button size="mini" type="text" icon="el-icon-info" @click="handleDetail(scope.row)"
-                         v-hasPermi="['basecfg:device:edit']"
-              >
-                详情
-              </el-button>
-              <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
-                         v-hasPermi="['basecfg:device:edit']"
-              >
-                修改
-              </el-button>
-              <el-button size="mini" type="text" icon="el-icon-delete" class="deleteBtn"
-                         @click="handleDelete(scope.row)" v-hasPermi="['basecfg:device:remove']"
-              >
-                删除
-              </el-button>
-
-            </template>
-          </el-table-column>
-        </el-table>
-
-      <div v-else-if="istable === 2" >
-        <el-row :gutter="20" class="device-list">
-          <el-col v-for="device in deviceList" :key="device.id" :span="6">
-            <div :class="`device-card ${backStyle(device.areaPath)}`">
-              <div class="device-header">
-                <i class="el-icon-s-operation" style="margin-right: 8px;"></i>
-                {{ device.deviceName }}
-              </div>
-              <div class="device-body">
-                <p>设备代码:<span class="device-code">{{ device.deviceCode }}</span></p>
-                <p>安装位置:<span class="deviceOthers">{{ device.areaPath }}</span></p>
-                <p>归属设施:<span class="deviceOthers">{{ device.refFacsName }}</span></p>
-                <p>设备分类:<span class="deviceOthers">{{ device.deviceCategoryName }}</span></p>
-                <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
-              </div>
-              <div class="device-footer">
-                <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
-                <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
-              </div>
-            </div>
-          </el-col>
-        </el-row>
-      </div>
-
-
-        <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
-                    :limit.sync="queryParams.pageSize"
-                    @pagination="getList"
-        />
-
-        <!-- 添加或修改能源设备对话框 -->
-        <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-          <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-            <el-form-item label="归属设施" prop="refFacs">
-              <el-select v-model="form.refFacs">
-                <el-option v-for="item in facsOptions" :label="item.facsName" :value="item.facsCode"
-                           :key="item.facsCode"
-                />
-              </el-select>
-            </el-form-item>
-
-            <el-form-item label="设备代码" prop="deviceCode">
-              <el-input v-model="form.deviceCode" placeholder="请输入设备代码"/>
-            </el-form-item>
-            <el-form-item label="设备名称" prop="deviceName">
-              <el-input v-model="form.deviceName" placeholder="请输入设备名称"/>
-            </el-form-item>
-
-
-            <el-form-item label="功能类型" prop="psCode" v-if="queryParams.deviceCategory === 'W'">
-              <el-select v-model="form.psCode">
-                <el-option v-for="item in devOptions" :label="item.psName" :value="item.psCode"
-                           :key="item.psCode"
-                />
-              </el-select>
-            </el-form-item>
-
-            <el-form-item label="设备类型" prop="deviceType">
-              <el-select v-model="form.deviceCategory">
-                <el-option v-for="item in subCategoryOptions" :label="item.name" :value="item.code"
-                           :key="item.code"
-                />
-              </el-select>
-            </el-form-item>
-            <el-form-item label="设备模型" prop="deviceModel">
-              <el-select v-model="form.deviceModel" style="width:100%" @change="handleModelChange">
-                <el-option
-                  v-for="item in modelList"
-                  :label="item.modelName"
-                  :value="item.modelCode"
-                  :key="item.modelCode"
-                />
-              </el-select>
-            </el-form-item>
-            <!-- 这里可以展示属性名称和属性值 -->
-            <div v-if="attrList.length > 0" class="attr-list-container">
-              <h3>模型属性:</h3>
-              <ul>
-                <li v-for="attr in attrList" :key="attr.attrKey" class="attr-item">
-                  <span class="attr-name">{{ attr.attrName }} ({{ attr.attrUnit }}):</span>
-                  <!-- 使用 el-input 组件允许用户编辑属性值 -->
-                  <el-input
-                    v-model="attrValuesMap[attr.attrKey]"
-                    placeholder="点击编辑"
-                    size="small"
-                    @blur="updateAttrValue(attr.attrKey, attrValuesMap[attr.attrKey])"
-                  >
-                  </el-input>
-                </li>
-              </ul>
-            </div>
-            <h3 class="attr-list-container" v-if="attrList.length > 0">自定义属性
-              <el-form-item label="" prop="attrList">
-                <el-table class="attr-table" v-loading="loading" :data="form.customAttrs" max-height="280px"
-                          key="'customAttrs'"
-                >
-                  <el-table-column label="标识" align="center" prop="attrKey">
-                    <template slot-scope="scope">
-                      <el-input size="mini" v-model="scope.row.attrKey" placeholder="请输入标识"/>
-                    </template>
-                  </el-table-column>
-                  <el-table-column label="属性名" align="center" prop="attrName">
-                    <template slot-scope="scope">
-                      <el-input size="mini" v-model="scope.row.attrName" placeholder="请输入属性名"/>
-                    </template>
-                  </el-table-column>
-                  <el-table-column label="属性值" align="center" prop="attrValue">
-                    <template slot-scope="scope">
-                      <el-input size="mini" v-model="scope.row.attrValue" placeholder="请输入属性值"/>
-                    </template>
-                  </el-table-column>
-                  <el-table-column align="center" label="操作">
-                    <template slot="header">
-                      <div class="operateBtns" @click="addCustomAttr">
-                        <span>添加</span><i class="el-icon-circle-plus-outline"></i>
-                      </div>
-                    </template>
-                    <template slot-scope="scope">
-                      <i class="el-icon-delete" @click="deleteCustomAttr(scope.$index)"></i>
-                    </template>
-                  </el-table-column>
-                </el-table>
+          <div class="other-content">
+            <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
+                     label-width="68px"
+            >
+              <el-form-item label="设备分类" prop="deviceSubCategory">
+                <el-select v-model="queryParams.deviceSubCategory">
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
+                             :key="item.code"
+                  />
+                </el-select>
               </el-form-item>
-            </h3>
-            <el-form-item label="子系统" prop="subsystemCode">
-              <el-select v-model="form.subsystemCode">
-                <el-option v-for="item in subsystemOptions" :label="item.systemName" :value="item.systemCode"
-                           :key="item.systemCode"
-                />
-              </el-select>
-            </el-form-item>
-          </el-form>
-          <div slot="footer" class="dialog-footer">
-            <el-button type="primary" @click="submitForm">确 定</el-button>
-            <el-button @click="cancel">取 消</el-button>
-          </div>
-        </el-dialog>
+              <el-form-item label="归属设施" prop="refFacs">
+                <el-select v-model="queryParams.refFacs">
+                  <el-option v-for="item in facsOptions" :label="item.facsName" :value="item.facsCode"
+                             :key="item.facsCode"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item label="子系统" prop="subsystemCode">
+                <el-select v-model="queryParams.subsystemCode">
+                  <el-option v-for="item in subsystemOptions" :label="item.systemName" :value="item.systemCode"
+                             :key="item.systemCode"
+                  />
+                </el-select>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+                <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+              </el-form-item>
+            </el-form>
 
-        <!--设备器件-->
-        <el-drawer :title=ComponentRow.deviceName size="80%" :visible.sync="showDevProcessDrawer" direction="rtl">
-          <div class="drawer-content" style="padding-left:50px">
             <el-row :gutter="10" class="mb8">
               <el-col :span="1.5">
-                <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleComponentAdd"
-                           v-hasPermi="['ems:component:add']"
+                <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+                           v-hasPermi="['ems:device:add']"
                 >新增
                 </el-button>
               </el-col>
+              <el-col :span="1.5">
+                <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+                           v-hasPermi="['ems:device:edit']"
+                >修改
+                </el-button>
+              </el-col>
+              <el-col :span="1.5">
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
+                           v-hasPermi="['ems:device:remove']"
+                >删除
+                </el-button>
+              </el-col>
+              <el-col :span="1.5">
+                <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+                           v-hasPermi="['ems:device:export']"
+                >导出
+                </el-button>
+              </el-col>
+              <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
             </el-row>
-            <el-table v-loading="loading" :data="ComponentList">
-              <el-table-column type="selection" width="55" align="center"/>
-              <el-table-column label="部件编码" align="center" prop="compoCode"/>
-              <el-table-column label="部件标签" align="center" prop="compoTag">
-                <template slot-scope="scope">
-                  {{ objComTypeMapping[scope.row.compoTag] }}
-                </template>
-              </el-table-column>
-              <el-table-column label="工艺标识代码" align="center" prop="psCode"/>
-              <el-table-column label="外系统部件编码" align="center" prop="extCompoCode"/>
-              <el-table-column label="部件模型" align="center" prop="compoModel"/>
-              <el-table-column label="部件品牌" align="center" prop="compoBrand"/>
-              <el-table-column label="部件型号" align="center" prop="compoSpec"/>
-              <el-table-column label="祖籍列表" align="center" prop="ancestors"/>
-              <el-table-column label="上级部件" align="center" prop="parentEqpt"/>
+          </div>
 
+          <div class="table-content">
+            <!--分页-->
+            <div class="button-group-container">
+              <el-button-group>
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
+              </el-button-group>
+            </div>
+
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
+              <el-table-column type="selection" width="55" align="center"/>
+              <el-table-column label="设备名称" align="left" prop="deviceName"/>
+              <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
+              <el-table-column label="归属设施" align="center" prop="refFacsName"/>
+              <el-table-column label="设备分类" align="center" prop="deviceCategoryName"/>
+              <el-table-column label="子系统" align="center" prop="subsystemName"/>
               <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
                 <template slot-scope="scope">
-                  <el-button size="mini" type="text" icon="el-icon-edit" @click="handleComponentUpdate(scope.row)"
-                             v-hasPermi="['ems:component:edit']"
+                  <el-button size="mini" type="text" icon="el-icon-info" @click="handleDevProcess(scope.row)"
+                             v-hasPermi="['basecfg:device:edit']" v-if="shouldShowDevProcessButton(scope.row)"
+                  >
+                    器件
+                  </el-button>
+                  <el-button size="mini" type="text" icon="el-icon-info" @click="handleDetail(scope.row)"
+                             v-hasPermi="['basecfg:device:edit']"
+                  >
+                    详情
+                  </el-button>
+                  <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+                             v-hasPermi="['basecfg:device:edit']"
                   >
                     修改
                   </el-button>
                   <el-button size="mini" type="text" icon="el-icon-delete" class="deleteBtn"
-                             @click="handleComponentDelete(scope.row)" v-hasPermi="['ems:component:remove']"
+                             @click="handleDelete(scope.row)" v-hasPermi="['basecfg:device:remove']"
                   >
                     删除
                   </el-button>
+
                 </template>
               </el-table-column>
             </el-table>
-            <pagination v-show="total>0" :total="total" :page.sync="queryComponentParams.pageNum"
-                        :limit.sync="queryComponentParams.pageSize"
-                        @pagination="getComponentList"
+
+            <div v-else-if="istable === 2">
+              <el-row :gutter="20" class="device-list">
+                <el-col v-for="device in deviceList" :key="device.id" :span="6">
+                  <div :class="`device-card ${backStyle(device.areaPath)}`">
+                    <div class="device-header">
+                      <i class="el-icon-s-operation" style="margin-right: 8px;"></i>
+                      {{ device.deviceName }}
+                    </div>
+                    <div class="device-body">
+                      <p>设备代码:<span class="device-code">{{ device.deviceCode }}</span></p>
+                      <p>安装位置:<span class="deviceOthers">{{ device.areaPath }}</span></p>
+                      <p>归属设施:<span class="deviceOthers">{{ device.refFacsName }}</span></p>
+                      <p>设备分类:<span class="deviceOthers">{{ device.deviceCategoryName }}</span></p>
+                      <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
+                    </div>
+                    <div class="device-footer">
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
+                      <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
+                    </div>
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+
+
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
+                        :limit.sync="queryParams.pageSize"
+                        @pagination="getList"
             />
 
-            <!-- 添加或修改设备器件对话框 -->
-            <el-dialog :title="title" :visible.sync="componentOpen" width="500px" append-to-body>
-              <el-form ref="componentForm" :model="componentForm" :rules="componentRules" label-width="150px">
-                <!--                <el-form-item label="设备code" prop="deviceCode">-->
-                <!--                  <el-input v-model="componentForm.deviceCode" placeholder="请输入设备code" />-->
-                <!--                </el-form-item>-->
-                <el-form-item label="部件编码" prop="compoCode">
-                  <el-input v-model="componentForm.compoCode" placeholder="请输入部件编码"/>
-                </el-form-item>
-                <el-form-item label="部件标签" prop="compoTag">
-                  <el-select v-model="componentForm.compoTag" placeholder="请输入部件标签">
-                    <el-option v-for="item in objComTypeOptions"
-                               :label="item.name"
-                               :value="item.code"
-                               :key="item.code"
+            <!-- 添加或修改能源设备对话框 -->
+            <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+              <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+                <el-form-item label="归属设施" prop="refFacs">
+                  <el-select v-model="form.refFacs">
+                    <el-option v-for="item in facsOptions" :label="item.facsName" :value="item.facsCode"
+                               :key="item.facsCode"
                     />
-
                   </el-select>
                 </el-form-item>
-                <el-form-item label="工艺标签代码" prop="psCode">
-                  <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                    <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
-                  </el-select>
+
+                <el-form-item label="设备代码" prop="deviceCode">
+                  <el-input v-model="form.deviceCode" placeholder="请输入设备代码"/>
                 </el-form-item>
-                <el-form-item label="外系统部件编码" prop="extCompoCode">
-                  <el-input v-model="componentForm.extCompoCode" placeholder="请输入外系统部件编码"/>
+                <el-form-item label="设备名称" prop="deviceName">
+                  <el-input v-model="form.deviceName" placeholder="请输入设备名称"/>
                 </el-form-item>
-                <el-form-item label="部件模型" prop="compoModel">
-                  <el-select v-model="componentForm.compoModel" placeholder="请输入部件模型">
-                    <el-option v-for="item in this.modelList" :label="item.modelCode" :value="item.modelCode"
-                               :key="item.modelCode"
+
+
+                <el-form-item label="功能类型" prop="psCode" v-if="queryParams.deviceCategory === 'W'">
+                  <el-select v-model="form.psCode">
+                    <el-option v-for="item in devOptions" :label="item.psName" :value="item.psCode"
+                               :key="item.psCode"
                     />
                   </el-select>
                 </el-form-item>
-                <el-form-item label="部件品牌" prop="compoBrand">
-                  <el-input v-model="componentForm.compoBrand" placeholder="请输入部件品牌"/>
-                </el-form-item>
-                <el-form-item label="部件型号" prop="compoSpec">
-                  <el-input v-model="componentForm.compoSpec" placeholder="请输入部件型号"/>
-                </el-form-item>
-                <el-form-item label="祖籍列表" prop="ancestors">
-                  <el-input v-model="componentForm.ancestors" placeholder="请输入祖籍列表"/>
+
+                <el-form-item label="设备类型" prop="deviceType">
+                  <el-select v-model="form.deviceCategory">
+                    <el-option v-for="item in subCategoryOptions" :label="item.name" :value="item.code"
+                               :key="item.code"
+                    />
+                  </el-select>
                 </el-form-item>
-                <el-form-item label="上级列表" prop="parentCompo">
-                  <el-input v-model="componentForm.parentCompo" placeholder="请输入上级列表"/>
+                <el-form-item label="设备模型" prop="deviceModel">
+                  <el-select v-model="form.deviceModel" style="width:100%" @change="handleModelChange">
+                    <el-option
+                      v-for="item in modelList"
+                      :label="item.modelName"
+                      :value="item.modelCode"
+                      :key="item.modelCode"
+                    />
+                  </el-select>
                 </el-form-item>
 
+                <!-- 这里可以展示属性名称和属性值 -->
+                <div v-if="attrList.length > 0" class="attr-list-container">
+                  <h3>模型属性:</h3>
+                  <ul>
+                    <li v-for="attr in attrList" :key="attr.attrKey" class="attr-item">
+                      <span class="attr-name">{{ attr.attrName }} ({{ attr.attrUnit }}):</span>
+                      <!-- 使用 el-input 组件允许用户编辑属性值 -->
+                      <el-input
+                        v-model="attrValuesMap[attr.attrKey]"
+                        placeholder="点击编辑"
+                        size="small"
+                        @blur="updateAttrValue(attr.attrKey, attrValuesMap[attr.attrKey])"
+                      >
+                      </el-input>
+                    </li>
+                  </ul>
+                </div>
+                <h3 class="attr-list-container" v-if="attrList.length > 0">自定义属性
+                  <el-form-item label="" prop="attrList">
+                    <el-table class="attr-table" v-loading="loading" :data="form.customAttrs" max-height="280px"
+                              key="'customAttrs'"
+                    >
+                      <el-table-column label="标识" align="center" prop="attrKey">
+                        <template slot-scope="scope">
+                          <el-input size="mini" v-model="scope.row.attrKey" placeholder="请输入标识"/>
+                        </template>
+                      </el-table-column>
+                      <el-table-column label="属性名" align="center" prop="attrName">
+                        <template slot-scope="scope">
+                          <el-input size="mini" v-model="scope.row.attrName" placeholder="请输入属性名"/>
+                        </template>
+                      </el-table-column>
+                      <el-table-column label="属性值" align="center" prop="attrValue">
+                        <template slot-scope="scope">
+                          <el-input size="mini" v-model="scope.row.attrValue" placeholder="请输入属性值"/>
+                        </template>
+                      </el-table-column>
+                      <el-table-column align="center" label="操作">
+                        <template slot="header">
+                          <div class="operateBtns" @click="addCustomAttr">
+                            <span>添加</span><i class="el-icon-circle-plus-outline"></i>
+                          </div>
+                        </template>
+                        <template slot-scope="scope">
+                          <i class="el-icon-delete" @click="deleteCustomAttr(scope.$index)"></i>
+                        </template>
+                      </el-table-column>
+                    </el-table>
+                  </el-form-item>
+                </h3>
+                <el-form-item label="子系统" prop="subsystemCode">
+                  <el-select v-model="form.subsystemCode">
+                    <el-option v-for="item in subsystemOptions" :label="item.systemName" :value="item.systemCode"
+                               :key="item.systemCode"
+                    />
+                  </el-select>
+                </el-form-item>
               </el-form>
               <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="submitComponentForm">确 定</el-button>
-                <el-button @click="ComponentCancel">取 消</el-button>
+                <el-button type="primary" @click="submitForm">确 定</el-button>
+                <el-button @click="cancel">取 消</el-button>
               </div>
             </el-dialog>
-          </div>
-        </el-drawer>
-
-        <!-- 详情弹框 -->
-        <el-dialog :visible.sync="showDrawer" title="设备详情">
-          <div v-if="curRow">
-            <!-- 设备基本信息 -->
-            <el-card class="box-card">
-              <div slot="header" class="clearfix">
-                <span class="section-title">设备基本信息</span>
-              </div>
-              <div>
-                <p>设备代码:{{ curRow.deviceCode }}</p>
-                <p>设备名称:{{ curRow.deviceName }}</p>
-                <p>设备类型:{{ curRow.deviceCategoryName }}</p>
-                <p>子系统:{{ curRow.subsystemName }}</p>
-                <p>归属区域:{{ curRow.areaPath }}</p>
-                <p>归属设施:{{ curRow.refFacsName }}</p>
-              </div>
-            </el-card>
 
-            <!-- 属性信息 -->
-            <el-card class="box-card" v-if="attrData.length > 0">
-              <div slot="header" class="clearfix">
-                <span class="section-title">属性定义</span>
-              </div>
-              <div v-for="(item, index) in attrData" :key="index">
-                <p>属性名称:{{ item.attrName }}</p>
-                <p>属性值:{{ item.attrValue }}</p>
-                <p>属性单位:{{ item.attrUnit }}</p>
-                <!-- 在每个条目之后添加横线,除了最后一个条目 -->
-                <div v-if="index < attrData.length - 1" class="divider"></div>
-              </div>
-            </el-card>
-            <!-- 能力信息 -->
-            <el-card class="box-card" v-if="abilityData.length > 0">
-              <div slot="header" class="clearfix">
-                <span class="section-title">能力定义</span>
-              </div>
-              <div v-for="(item, index) in abilityData" :key="index">
-                <p>能力名称:{{ item.abilityName }}</p>
-                <p>能力键:{{ item.abilityKey }}</p>
-                <p>能力参数:{{ item.abilityParam }}</p>
-                <p>能力描述:{{ item.abilityDesc }}</p>
-                <!-- 在每个条目之后添加横线,除了最后一个条目 -->
-                <div v-if="index < abilityData.length - 1" class="divider"></div>
-              </div>
-            </el-card>
-            <!-- 事件信息 -->
-            <el-card class="box-card" v-if="eventData.length > 0">
-              <div slot="header" class="clearfix">
-                <span class="section-title">事件定义</span>
+            <!--设备器件-->
+            <el-drawer :title=ComponentRow.deviceName size="80%" :visible.sync="showDevProcessDrawer" direction="rtl">
+              <div class="drawer-content" style="padding-left:50px">
+                <el-row :gutter="10" class="mb8">
+                  <el-col :span="1.5">
+                    <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleComponentAdd"
+                               v-hasPermi="['ems:component:add']"
+                    >新增
+                    </el-button>
+                  </el-col>
+                </el-row>
+                <el-table v-loading="loading" :data="ComponentList">
+                  <el-table-column type="selection" width="55" align="center"/>
+                  <el-table-column label="部件编码" align="center" prop="compoCode"/>
+                  <el-table-column label="部件标签" align="center" prop="compoTag">
+                    <template slot-scope="scope">
+                      {{ objComTypeMapping[scope.row.compoTag] }}
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="工艺标识代码" align="center" prop="psCode"/>
+                  <el-table-column label="外系统部件编码" align="center" prop="extCompoCode"/>
+                  <el-table-column label="部件模型" align="center" prop="compoModel"/>
+                  <el-table-column label="部件品牌" align="center" prop="compoBrand"/>
+                  <el-table-column label="部件型号" align="center" prop="compoSpec"/>
+                  <el-table-column label="祖籍列表" align="center" prop="ancestors"/>
+                  <el-table-column label="上级部件" align="center" prop="parentEqpt"/>
+
+                  <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                    <template slot-scope="scope">
+                      <el-button size="mini" type="text" icon="el-icon-edit" @click="handleComponentUpdate(scope.row)"
+                                 v-hasPermi="['ems:component:edit']"
+                      >
+                        修改
+                      </el-button>
+                      <el-button size="mini" type="text" icon="el-icon-delete" class="deleteBtn"
+                                 @click="handleComponentDelete(scope.row)" v-hasPermi="['ems:component:remove']"
+                      >
+                        删除
+                      </el-button>
+                    </template>
+                  </el-table-column>
+                </el-table>
+                <pagination v-show="total>0" :total="total" :page.sync="queryComponentParams.pageNum"
+                            :limit.sync="queryComponentParams.pageSize"
+                            @pagination="getComponentList"
+                />
+
+                <!-- 添加或修改设备器件对话框 -->
+                <el-dialog :title="title" :visible.sync="componentOpen" width="500px" append-to-body>
+                  <el-form ref="componentForm" :model="componentForm" :rules="componentRules" label-width="150px">
+                    <!--                <el-form-item label="设备code" prop="deviceCode">-->
+                    <!--                  <el-input v-model="componentForm.deviceCode" placeholder="请输入设备code" />-->
+                    <!--                </el-form-item>-->
+                    <el-form-item label="部件编码" prop="compoCode">
+                      <el-input v-model="componentForm.compoCode" placeholder="请输入部件编码"/>
+                    </el-form-item>
+                    <el-form-item label="部件标签" prop="compoTag">
+                      <el-select v-model="componentForm.compoTag" placeholder="请输入部件标签">
+                        <el-option v-for="item in objComTypeOptions"
+                                   :label="item.name"
+                                   :value="item.code"
+                                   :key="item.code"
+                        />
+
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="工艺标签代码" prop="psCode">
+                      <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="外系统部件编码" prop="extCompoCode">
+                      <el-input v-model="componentForm.extCompoCode" placeholder="请输入外系统部件编码"/>
+                    </el-form-item>
+                    <el-form-item label="部件模型" prop="compoModel">
+                      <el-select v-model="componentForm.compoModel" placeholder="请输入部件模型">
+                        <el-option v-for="item in this.modelList" :label="item.modelCode" :value="item.modelCode"
+                                   :key="item.modelCode"
+                        />
+                      </el-select>
+                    </el-form-item>
+                    <el-form-item label="部件品牌" prop="compoBrand">
+                      <el-input v-model="componentForm.compoBrand" placeholder="请输入部件品牌"/>
+                    </el-form-item>
+                    <el-form-item label="部件型号" prop="compoSpec">
+                      <el-input v-model="componentForm.compoSpec" placeholder="请输入部件型号"/>
+                    </el-form-item>
+                    <el-form-item label="祖籍列表" prop="ancestors">
+                      <el-input v-model="componentForm.ancestors" placeholder="请输入祖籍列表"/>
+                    </el-form-item>
+                    <el-form-item label="上级列表" prop="parentCompo">
+                      <el-input v-model="componentForm.parentCompo" placeholder="请输入上级列表"/>
+                    </el-form-item>
+
+                  </el-form>
+                  <div slot="footer" class="dialog-footer">
+                    <el-button type="primary" @click="submitComponentForm">确 定</el-button>
+                    <el-button @click="ComponentCancel">取 消</el-button>
+                  </div>
+                </el-dialog>
               </div>
-              <div v-for="(item, index) in eventData" :key="index">
-                <p>事件名称:{{ item.eventKey }}</p>
-                <p>事件类型:{{ item.eventType === 1 ? '消息上报' : '异常告警' }}</p>
-                <p>事件代码:{{ item.eventCode }}</p>
-                <p>外部事件代码:{{ item.extEventCode }}</p>
-                <!-- 在每个条目之后添加横线,除了最后一个条目 -->
-                <div v-if="index < eventData.length - 1" class="divider"></div>
+            </el-drawer>
+
+            <!-- 详情弹框 -->
+            <el-dialog :visible.sync="showDrawer" title="设备详情">
+              <div v-if="curRow">
+                <!-- 设备基本信息 -->
+                <el-card class="box-card">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">设备基本信息</span>
+                  </div>
+                  <div>
+                    <p>设备代码:{{ curRow.deviceCode }}</p>
+                    <p>设备名称:{{ curRow.deviceName }}</p>
+                    <p>设备类型:{{ curRow.deviceCategoryName }}</p>
+                    <p>子系统:{{ curRow.subsystemName }}</p>
+                    <p>归属区域:{{ curRow.areaPath }}</p>
+                    <p>归属设施:{{ curRow.refFacsName }}</p>
+                  </div>
+                </el-card>
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
+                <!-- 属性信息 -->
+                <el-card class="box-card" v-if="attrData.length > 0">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">属性定义</span>
+                  </div>
+                  <div v-for="(item, index) in attrData" :key="index">
+                    <p>属性名称:{{ item.attrName }}</p>
+                    <p>属性值:{{ item.attrValue }}</p>
+                    <p>属性单位:{{ item.attrUnit }}</p>
+                    <!-- 在每个条目之后添加横线,除了最后一个条目 -->
+                    <div v-if="index < attrData.length - 1" class="divider"></div>
+                  </div>
+                </el-card>
+                <!-- 能力信息 -->
+                <el-card class="box-card" v-if="abilityData.length > 0">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">能力定义</span>
+                  </div>
+                  <div v-for="(item, index) in abilityData" :key="index">
+                    <p>能力名称:{{ item.abilityName }}</p>
+                    <p>能力键:{{ item.abilityKey }}</p>
+                    <p>能力参数:{{ item.abilityParam }}</p>
+                    <p>能力描述:{{ item.abilityDesc }}</p>
+                    <!-- 在每个条目之后添加横线,除了最后一个条目 -->
+                    <div v-if="index < abilityData.length - 1" class="divider"></div>
+                  </div>
+                </el-card>
+                <!-- 事件信息 -->
+                <el-card class="box-card" v-if="eventData.length > 0">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">事件定义</span>
+                  </div>
+                  <div v-for="(item, index) in eventData" :key="index">
+                    <p>事件名称:{{ item.eventKey }}</p>
+                    <p>事件类型:{{ item.eventType === 1 ? '消息上报' : '异常告警' }}</p>
+                    <p>事件代码:{{ item.eventCode }}</p>
+                    <p>外部事件代码:{{ item.extEventCode }}</p>
+                    <!-- 在每个条目之后添加横线,除了最后一个条目 -->
+                    <div v-if="index < eventData.length - 1" class="divider"></div>
+                  </div>
+                </el-card>
               </div>
-            </el-card>
+            </el-dialog>
           </div>
-        </el-dialog>
-        </div>
         </div>
       </el-col>
     </el-row>
@@ -430,21 +447,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -461,6 +477,32 @@ export default {
       showDevProcessDrawer: false,
       componentOpen: false,
       istable: 2,
+      statusAttr: [{
+        attr: '实施电量',
+        attrUnit: 'kW·h',
+        attrValue: '10.3'
+      },
+        {
+          attr: '设备运行状态',
+          attrUnit: '',
+          attrValue: '工作中'
+        },
+        {
+          attr: '设备电压',
+          attrUnit: 'V',
+          attrValue: '20'
+        },
+        {
+          attr: '设备电流',
+          attrUnit: 'A',
+          attrValue: '5'
+        },
+        {
+          attr: '设备功率',
+          attrUnit: 'W',
+          attrValue: '100'
+        },
+      ],
       // 遮罩层
       loading: true,
       // 选中数组
@@ -518,9 +560,9 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
@@ -535,27 +577,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +660,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +701,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -930,7 +972,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1135,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,7 +1172,7 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
@@ -1147,10 +1189,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }
 
@@ -1165,7 +1209,7 @@ export default {
   display: flex;
   justify-content: space-between;
   padding: 5px;
- // background-color: #f9f9f9;
+  // background-color: #f9f9f9;
 }
 
 .device-footer .el-button {

+ 71 - 39
ems-ui-cloud/src/views/adapter/zm/index.vue

@@ -22,7 +22,8 @@
             >
               <el-form-item label="设备分类" prop="deviceSubCategory">
                 <el-select v-model="queryParams.deviceSubCategory">
-                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name" :value="item.code"
+                  <el-option v-for="item in subCategoryOptions" placeholder="设备分类" :label="item.name"
+                             :value="item.code"
                              :key="item.code"
                   />
                 </el-select>
@@ -61,7 +62,8 @@
                 </el-button>
               </el-col>
               <el-col :span="1.5">
-                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+                <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
+                           @click="handleDelete"
                            v-hasPermi="['ems:device:remove']"
                 >删除
                 </el-button>
@@ -80,12 +82,13 @@
             <!--分页-->
             <div class="button-group-container">
               <el-button-group>
-                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)" />
-                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)" />
+                <el-button :type="primary1" icon="el-icon-s-fold" @click="switchData(1)"/>
+                <el-button :type="primary2" icon="el-icon-menu" @click="switchData(2)"/>
               </el-button-group>
             </div>
 
-            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange" v-if="istable === 1">
+            <el-table v-loading="loading" :data="deviceList" @selection-change="handleSelectionChange"
+                      v-if="istable === 1">
               <el-table-column type="selection" width="55" align="center"/>
               <el-table-column label="设备名称" align="left" prop="deviceName"/>
               <el-table-column label="安装位置" align="left" prop="areaPath" width="220px"/>
@@ -119,7 +122,7 @@
               </el-table-column>
             </el-table>
 
-            <div v-else-if="istable === 2" >
+            <div v-else-if="istable === 2">
               <el-row :gutter="20" class="device-list">
                 <el-col v-for="device in deviceList" :key="device.id" :span="6">
                   <div :class="`device-card ${backStyle(device.areaPath)}`">
@@ -135,9 +138,12 @@
                       <p>子系统:<span class="deviceOthers">{{ device.subsystemName }}</span></p>
                     </div>
                     <div class="device-footer">
-                      <el-button size="mini" plain icon=" el-icon-document"  @click="handleDetail(device)">详情</el-button>
+                      <el-button size="mini" plain icon=" el-icon-document" @click="handleDetail(device)">详情
+                      </el-button>
                       <el-button size="mini" plain icon="el-icon-edit" @click="handleUpdate(device)">修改</el-button>
-                      <el-button size="mini" plain icon="el-icon-delete"  type="danger" @click="handleDelete(device)">删除</el-button>
+                      <el-button size="mini" plain icon="el-icon-delete" type="danger" @click="handleDelete(device)">
+                        删除
+                      </el-button>
                     </div>
                   </div>
                 </el-col>
@@ -326,7 +332,8 @@
                     </el-form-item>
                     <el-form-item label="工艺标签代码" prop="psCode">
                       <el-select v-model="componentForm.psCode" placeholder="请输入工艺标签代码">
-                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode" :key="item.psCode"/>
+                        <el-option v-for="item in devOptions" :label="item.psCode" :value="item.psCode"
+                                   :key="item.psCode"/>
                       </el-select>
                     </el-form-item>
                     <el-form-item label="外系统部件编码" prop="extCompoCode">
@@ -378,7 +385,16 @@
                     <p>归属设施:{{ curRow.refFacsName }}</p>
                   </div>
                 </el-card>
-
+                <el-card class="box-card" style="margin-top: 10px">
+                  <div slot="header" class="clearfix">
+                    <span class="section-title">状态属性</span>
+                  </div>
+                  <div>
+                    <p v-for="attr in statusAttr" :key="attr.attr">{{ attr.attr }}:{{ attr.attrValue }} {{
+                        attr.attrUnit
+                      }}</p>
+                  </div>
+                </el-card>
                 <!-- 属性信息 -->
                 <el-card class="box-card" v-if="attrData.length > 0">
                   <div slot="header" class="clearfix">
@@ -430,21 +446,20 @@
 </template>
 
 <script>
-import { listDevRecursionByArea, getDevice, delDevice, addDevice, updateDevice } from '@/api/device/device'
-import { areaTreeSelect } from '@/api/basecfg/area'
-import { getFacsCategorygetByCode, listAllFacs } from '@/api/basecfg/emsfacs'
-import { listSubsystemAll } from '@/api/adapter/subsystem'
-import { getModelByCode, listAllModel } from '@/api/basecfg/objModel'
-import { getObjAttr } from '@/api/basecfg/objAttribute'
-import { addAttrValueBatch } from '@/api/basecfg/objAttributeValue'
-import { getDevProcess } from '@/api/commonApi'
-import { addComponent, delComponent, getComponent, listByDevice, updateComponent } from '@/api/basecfg/component'
+import {addDevice, delDevice, getDevice, listDevRecursionByArea, updateDevice} from '@/api/device/device'
+import {areaTreeSelect} from '@/api/basecfg/area'
+import {getFacsCategorygetByCode, listAllFacs} from '@/api/basecfg/emsfacs'
+import {listSubsystemAll} from '@/api/adapter/subsystem'
+import {getModelByCode, listAllModel} from '@/api/basecfg/objModel'
+import {getObjAttr} from '@/api/basecfg/objAttribute'
+import {addAttrValueBatch} from '@/api/basecfg/objAttributeValue'
+import {addComponent, delComponent, getComponent, listByDevice, updateComponent} from '@/api/basecfg/component'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
 
 export default {
   name: 'Device',
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       primary1: 'primary',
@@ -490,7 +505,22 @@ export default {
       subCategoryOptions: undefined,
       subsystemOptions: undefined,
       devOptions: undefined,
-
+      statusAttr: [{
+        attr: '开灯状态',
+        attrUnit: '',
+        attrValue: '开'
+      },
+        {
+          attr: '远程控制',
+          attrUnit: '',
+          attrValue: '否'
+        },
+        {
+          attr: '运行状态',
+          attrUnit: '',
+          attrValue: '在线'
+        }
+      ],
       defaultProps: {
         children: 'children',
         label: 'label'
@@ -518,9 +548,9 @@ export default {
         3: '风机'
       },
       objComTypeOptions: [
-        { code: 1, name: '总开' },
-        { code: 2, name: '照明' },
-        { code: 3, name: '风机' }
+        {code: 1, name: '总开'},
+        {code: 2, name: '照明'},
+        {code: 3, name: '风机'}
 
       ],
       curRow: {},
@@ -535,27 +565,27 @@ export default {
       // 表单校验
       rules: {
         refFacs: [
-          { required: true, message: '归属设施', trigger: 'blur' }
+          {required: true, message: '归属设施', trigger: 'blur'}
         ],
         refArea: [
-          { required: true, message: '安装位置', trigger: 'blur' }
+          {required: true, message: '安装位置', trigger: 'blur'}
         ],
         deviceCode: [
-          { required: true, message: '设备代码不能为空', trigger: 'blur' }
+          {required: true, message: '设备代码不能为空', trigger: 'blur'}
         ],
         deviceName: [
-          { required: true, message: '设备名称不能为空', trigger: 'blur' }
+          {required: true, message: '设备名称不能为空', trigger: 'blur'}
         ]
       },
       componentRules: {
         deviceCode: [
-          { required: true, message: '设备code不能为空', trigger: 'blur' }
+          {required: true, message: '设备code不能为空', trigger: 'blur'}
         ],
         compoCode: [
-          { required: true, message: '部件编码不能为空', trigger: 'blur' }
+          {required: true, message: '部件编码不能为空', trigger: 'blur'}
         ],
         psCode: [
-          { required: true, message: '工艺标签代码不能为空', trigger: 'blur' }
+          {required: true, message: '工艺标签代码不能为空', trigger: 'blur'}
         ]
       }
     }
@@ -618,7 +648,7 @@ export default {
     },
     handleComponentDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源对象属性编号为"' + ids + '"的数据项?').then(function () {
         return delComponent(ids)
       }).then(() => {
         console.log('删除row', row.deviceCode)
@@ -659,7 +689,7 @@ export default {
     /** 查询区域树结构 */
     getAreaTree(areaCode, layer) {
       areaTreeSelect(areaCode, layer).then(response => {
-        this.treeAreaOptions =  [{
+        this.treeAreaOptions = [{
           id: '-1',
           label: '全部',
           children: response.data
@@ -930,7 +960,7 @@ export default {
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids
-      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function() {
+      this.$modal.confirm('是否确认删除能源设备编号为"' + ids + '"的数据项?').then(function () {
         return delDevice(ids)
       }).then(() => {
         this.getList()
@@ -1093,7 +1123,7 @@ export default {
 }
 
 
-.contents{
+.contents {
   border: 20px solid #f2f2f5;
   background-color: #f2f2f5;
 }
@@ -1130,7 +1160,7 @@ export default {
   border: 1px solid #bfcbd9;
   border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 2px 12px 0 rgba(0,0,0,0.1);
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   transition: 0.3s;
   padding: 10px;
   font-size: 14px;
@@ -1147,10 +1177,12 @@ export default {
   font-size: 20px;
   font-weight: bold;
 }
-.device-code{
-  color:cornflowerblue;
+
+.device-code {
+  color: cornflowerblue;
 }
-.deviceOthers{
+
+.deviceOthers {
   color: black;
 }