Эх сурвалжийг харах

Merge branch 'master' of http://git.xt.wenhq.top:8083/wenhongquan/iotc

liwei19941102 2 жил өмнө
parent
commit
fee5769750

+ 125 - 54
ruoyi-ui-vue3/src/views/device/sensordash/index.vue

@@ -90,21 +90,15 @@
                 <el-table-column label="操作">
                   <template #default="scope">
                     <div>
-                      <el-button link >
-                        <el-tooltip effect="dark" content="详情">
-                          <el-icon>
-                            <Memo />
-                          </el-icon>
-                        </el-tooltip>
-                      </el-button>
-                      <el-button link >
+
+                      <el-button link @click="goedit(scope.row)">
                         <el-tooltip effect="dark" content="编辑">
                           <el-icon>
                             <Edit />
                           </el-icon>
                         </el-tooltip>
                       </el-button>
-                      <el-button link @click="cdbd" >
+                      <el-button link @click="cdbd(scope.row)" >
                         <el-tooltip effect="dark" content="测点绑定" >
                           <el-icon><VideoPlay /></el-icon>
                         </el-tooltip>
@@ -143,60 +137,90 @@
 
 
     <el-dialog
-      title="选择测点"
+      title="测点配置"
       v-model="cdbdshow"
     >
 
       <div style="display: flex; flex-direction: row; justify-content: space-between">
         <div style="display: flex; flex-direction: row;">
-          <div
-            style="
-                  display: flex;
-                  flex-direction: row;
-                  flex-wrap: nowrap;
-                  align-items: center;
-                "
-          >
-            <div style="font-size: 12px; width: 100px;">监测点编号:</div>
-            <el-input
-              v-model="searchform.devicename"
-              placeholder="请输入"
-            ></el-input>
-          </div>
-          <div
-            style="
-                  display: flex;
-                  flex-direction: row;
-                  flex-wrap: nowrap;
-                  align-items: center;
-                "
-          >
-            <div style="font-size: 12px; width: 80px;margin-right: 10px;text-align: right;">描述:</div>
-            <el-input
-              v-model="searchform.devicename"
-              placeholder="请输入"
-            ></el-input>
-          </div>
+
+
+
         </div>
         <div>
-          <el-button type="primary" plain>重置</el-button>
-          <el-button type="primary">搜索</el-button>
+          <el-button type="primary" plain @click="addrow">新增</el-button>
         </div>
       </div>
 
-      <el-table :data="devicetabledata" style="margin-top: 15px" height="400px">
-        <el-table-column label="传感器编号"></el-table-column>
-        <el-table-column label="服务"></el-table-column>
-        <el-table-column label="描述"></el-table-column>
-        <el-table-column label="类型"></el-table-column>
-        <el-table-column label="单位"></el-table-column>
+      <el-table :data="pointdata" style="margin-top: 15px" height="400px">
+        <el-table-column label="变量名" prop="name">
+          <template #default="scope">
+            <el-input v-model="scope.row.name"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column label="名称" prop="label">
+          <template #default="scope">
+           <el-input v-model="scope.row.label"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column label="单位" prop="unitId">
+          <template #default="scope">
+            <el-popover placement="right" :width="400" trigger="click">
+              <template #reference>
+                <el-button plain>{{ `${scope.row.unit}(${scope.row.unitType})` }}</el-button>
+              </template>
+              <el-table :data="allUnit" @cellClick="(row1)=>{scope.row.unit=row1.unitName;scope.row.unitType=row1.unitSymbol;}">
+                <el-table-column property="unitName" label="单位名称" />
+                <el-table-column property="unitSymbol" label="单位符号" />
+                <el-table-column property="unitType" label="分类" />
+              </el-table>
+            </el-popover>
+
+          </template>
+        </el-table-column>
+        <el-table-column label="描述" prop="desc">
+          <template #default="scope">
+            <el-input v-model="scope.row.desc"></el-input>
+          </template>
+        </el-table-column>
+        <el-table-column label="点表配置" prop="dataPointId">
+          <template #default="scope">
+            <span v-if="currentsensor.protocalType==3">无需配置</span>
+            <div  v-if="currentsensor.protocalType!=3">
+              <el-popover placement="right" :width="400" trigger="click">
+                <template #reference>
+                  <el-button  plain>{{ `${ (currentdatapointlist.find(i=>(i.id+"")==scope.row.dataPointId) ?? {name:'失效'}).name}` }}</el-button>
+                </template>
+                <el-table :data="currentdatapointlist" @cellClick="(row1)=>{scope.row.dataPointId=row1.id;}">
+                  <el-table-column property="name" label="点位名称" />
+                  <el-table-column property="valueType" label="变量类型" />
+                  <el-table-column property="addr" label="地址" />
+                </el-table>
+              </el-popover>
+            </div>
+
+
+          </template>
+        </el-table-column>
+        <el-table-column label="操作">
+          <template #default="scope">
+            <el-popconfirm title="确定删除该测点?" @confirm="deldatapoint(scope.$index)">
+              <template #reference>
+                <el-button link
+                ><el-tooltip effect="dark" content="删除"
+                ><el-icon><Delete /></el-icon></el-tooltip
+                ></el-button>
+              </template>
+            </el-popconfirm>
+          </template>
+        </el-table-column>
       </el-table>
 
 
       <template #footer>
         <div class="dialog-footer">
           <el-button @click="cdbdshow=false;"> 取消 </el-button>
-          <el-button type="primary" @click="cdbdshow=false"> 保存 </el-button>
+          <el-button type="primary" @click="dosave"> 保存 </el-button>
         </div>
       </template>
     </el-dialog>
@@ -216,19 +240,20 @@
 </template>
 
 <script setup>
-import {ref} from "vue";
+import {onMounted, ref} from "vue";
 import {LayTree} from "@layui/layui-vue";
 import "@layui/layui-vue/lib/index.css";
 import {useRoute, useRouter} from "vue-router";
 import {listEquipmentOrganizational} from "@/api/data/equipmentOrganizational"
 import {listEquipmentSbook} from "@/api/data/equipmentSbook"
 import {listSensor,delSensor,addSensor,updateSensor} from "@/api/data/sensor"
-import {delGateway} from "@/api/data/gateway";
+import {listDatapoint} from "@/api/data/datapoint";
+import {listUnit} from "@/api/data/unit";
 import {ElMessage, ElMessageBox} from "element-plus";
 
 const {proxy} = getCurrentInstance();
 const {protocal_type, sensor_type, sensor_status} = proxy.useDict("protocal_type", "sensor_type", "sensor_status");
-
+const pointdata = ref([]);
 
 const route = useRoute();
 const router = useRouter();
@@ -255,6 +280,7 @@ const pagedata = ref({
   current:1
 });
 
+const allUnit = ref([])
 
 const deleterow =(item)=>{
   delSensor(item.id).then((res)=>{
@@ -303,7 +329,12 @@ const initdata = ()=>{
 }
 
 const goadd = () => {
-  router.push("/device/sensordash/add")
+  router.push("/device/sensordash/add?type=0")
+}
+
+const goedit = (item)=>{
+  localStorage.setItem("currentsensor",JSON.stringify(item))
+  router.push("/device/sensordash/add?type=1")
 }
 
 
@@ -326,7 +357,7 @@ const getalldata = () => {
   let deviceids = getdeviceid(currentnode.value).split(",").filter(i => i != "").join(",");
   if (deviceids != "") {
     deviceids = deviceids.replaceAll("device_", "")
-    listSensor({...pagedata, params: {deviceids: deviceids,...searchform.value}}).then(res => {
+    listSensor({...pagedata.value, params: {deviceids: deviceids,...searchform.value}}).then(res => {
       const {rows,total,page,size} = res;
       pagedata.value = {total:total,current:page, size:10};
       devicetabledata.value = rows.map(item => {
@@ -377,12 +408,52 @@ const searchform = ref({
   desc: ""
 });
 
-
+const currentdatapointlist = ref([]);
 const cdbdshow = ref(false);
-const cdbd = () => {
+const currentsensor = ref(null);
+const cdbd = (item) => {
   cdbdshow.value = true;
+  listDatapoint({sensorId:item.id}).then(res=>{
+    const {rows,total,page,size} = res;
+    currentdatapointlist.value = rows;
+    currentsensor.value = item;
+    try{
+      pointdata.value = JSON.parse(item.datapoints);
+    }catch (e){}
+
+  })
+
+}
+
+const deldatapoint = (index)=>{
+  pointdata.value.splice(index,1)
 }
 
+const addrow = ()=>{
+  pointdata.value.push({
+    name: "",
+    unit: "",
+    unitType: "0",
+    desc: "",
+    label: "",
+    dataPointId:null
+  })
+}
+onMounted(()=>{
+  listUnit({}).then(res=>{
+    allUnit.value = res.data;
+  })
+})
+
+const dosave = ()=>{
+  let data = JSON.stringify(pointdata.value.filter(i=>i.name!==""));
+  currentsensor.value.datapoints = data;
+  updateSensor(currentsensor.value).then(res=>{
+    ElMessage.success("保存成功");
+    cdbdshow.value = false;
+    getalldata();
+  })
+}
 
 </script>