Procházet zdrojové kódy

Merge commit 'd0289f44f1ea9f84eaa455f658440d0129428ee8'

lihao16 před 4 měsíci
rodič
revize
7807045013

+ 7 - 1
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/SmsbDeviceGroupRel.java

@@ -35,11 +35,17 @@ public class SmsbDeviceGroupRel extends TenantEntity {
     private Long deviceGroupId;
 
     /**
-     * 设备id
+     * 设备标识
 
      */
     private String deviceIdentifier;
 
+    /**
+     * 设备名称
+
+     */
+    private String deviceName;
+
     /**
      * 场景序号
 

+ 11 - 4
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/bo/SmsbDeviceGroupRelBo.java

@@ -24,7 +24,7 @@ public class SmsbDeviceGroupRelBo extends BaseEntity {
      * 对应表id
 
      */
-    @NotNull(message = "对应表id不能为空", groups = { EditGroup.class })
+//    @NotNull(message = "对应表id不能为空", groups = { EditGroup.class })
     private Long id;
 
     /**
@@ -35,12 +35,19 @@ public class SmsbDeviceGroupRelBo extends BaseEntity {
     private Long deviceGroupId;
 
     /**
-     * 设备id
+     * 设备标识
 
      */
-    @NotNull(message = "设备id不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotNull(message = "设备标识不能为空", groups = { AddGroup.class, EditGroup.class })
     private String deviceIdentifier;
 
+    /**
+     * 设备名称
+
+     */
+//    @NotBlank(message = "设备名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String deviceName;
+
     /**
      * 场景序号
 
@@ -59,7 +66,7 @@ public class SmsbDeviceGroupRelBo extends BaseEntity {
      * 备注
 
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+//    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
 

+ 7 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/vo/SmsbDeviceGroupRelVo.java

@@ -45,6 +45,13 @@ public class SmsbDeviceGroupRelVo implements Serializable {
     @ExcelProperty(value = "设备id")
     private String deviceIdentifier;
 
+    /**
+     * 设备名称
+
+     */
+    @ExcelProperty(value = "设备名称")
+    private String deviceName;
+
     /**
      * 场景序号
 

+ 17 - 8
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceAuthServiceImpl.java

@@ -251,27 +251,36 @@ public class SmsbDeviceAuthServiceImpl implements ISmsbDeviceAuthService {
         insert.setAuthRemark(authRemark);
         baseMapper.insert(insert);
 
-        AgentAuthRes agentAuthRes = new AgentAuthRes();
         List<SmsbDeviceGroupRelVo> groupVoList = deviceGroupRelMapper.queryGroupRelVoListByIdentifier(identifier);
         if (groupVoList.isEmpty()) {
-            return R.fail("未找到设备组");
+            return R.ok("未找到设备组");
         }
+        AgentAuthRes agentAuthRes = new AgentAuthRes();
         agentAuthRes.setGroupId(groupVoList.get(0).getDeviceGroupId());
         ArrayList<Map<String, String>> deviceList = new ArrayList<>();
         for (int i = 0; i < groupVoList.size(); i++) {
             Map<String, String> device = new HashMap<>();
             String deviceIdentifier = groupVoList.get(i).getDeviceIdentifier();
             SmsbDeviceVo deviceVo = deviceMapper.getDeviceVoByIdentifier(deviceIdentifier);
+            if (deviceVo == null) {
+                device.put("identifier", deviceIdentifier);
+                deviceList.add(device);
+                continue;
+            }
             device.put("deviceName", deviceVo.getName());
             device.put("sceneName", groupVoList.get(i).getSceneName());
             SmsbDeviceChatKeyVo chatKeyVo = chatKeyMapper.selectVoByDeviceId(deviceVo.getId());
-            device.put("apiKey", chatKeyVo.getApiKey());
-            device.put("apiUrl", chatKeyVo.getApiUrl());
-            device.put("deviceMac", deviceIdentifier);
+            if (chatKeyVo != null) {
+                device.put("apiKey", chatKeyVo.getApiKey());
+                device.put("apiUrl", chatKeyVo.getApiUrl());
+            }
+            device.put("identifier", deviceIdentifier);
             SmsbDeviceXfApiVo xfApiVo = xfApiMapper.selectVoOne(new LambdaQueryWrapper<SmsbDeviceXfApi>().last("limit 1"));
-            device.put("xfAppId", xfApiVo.getAppId());
-            device.put("xfApiSecret", xfApiVo.getApiSecret());
-            device.put("xfApiKey", xfApiVo.getApiKey());
+            if (xfApiVo != null) {
+                device.put("xfAppId", xfApiVo.getAppId());
+                device.put("xfApiSecret", xfApiVo.getApiSecret());
+                device.put("xfApiKey", xfApiVo.getApiKey());
+            }
             deviceList.add(device);
         }
         agentAuthRes.setDeviceList(deviceList);

+ 5 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceGroupRelServiceImpl.java

@@ -1,6 +1,8 @@
 package com.inspur.device.service.impl;
 
+import com.inspur.device.domain.vo.SmsbDeviceVo;
 import com.inspur.device.mapper.SmsbDeviceGroupRelMapper;
+import com.inspur.device.mapper.SmsbDeviceMapper;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -30,6 +32,7 @@ import java.util.Collection;
 public class SmsbDeviceGroupRelServiceImpl implements ISmsbDeviceGroupRelService {
 
     private final SmsbDeviceGroupRelMapper baseMapper;
+    private final SmsbDeviceMapper deviceMapper;
 
     /**
      * 查询设备组对应关系表
@@ -88,6 +91,8 @@ public class SmsbDeviceGroupRelServiceImpl implements ISmsbDeviceGroupRelService
     public Boolean insertByBo(SmsbDeviceGroupRelBo bo) {
         SmsbDeviceGroupRel add = MapstructUtils.convert(bo, SmsbDeviceGroupRel.class);
         validEntityBeforeSave(add);
+        SmsbDeviceVo device = deviceMapper.getDeviceVoByIdentifier(add.getDeviceIdentifier());
+        add.setDeviceName(device.getName());
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());

+ 5 - 8
smsb-modules/smsb-device/src/main/resources/mapper/device/SmsbDeviceGroupRelMapper.xml

@@ -22,14 +22,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="getRelListByIdentifier" parameterType="String" resultType="com.inspur.device.domain.vo.SmsbDeviceGroupRelVo">
-        SELECT
-            *
-        FROM
-            smsb_device_group_rel
-        WHERE
-            device_group_id = (SELECT device_group_id FROM smsb_device_group_rel WHERE device_identifier = #{deviceIdentifier})
-        ORDER BY
-            scene_sort ASC
+        SELECT *
+        FROM smsb_device_group_rel
+        WHERE device_group_id =
+              (SELECT device_group_id FROM smsb_device_group_rel WHERE device_identifier = #{deviceIdentifier})
+        ORDER BY scene_sort ASC
     </select>
 
 </mapper>

+ 0 - 11
smsb-plus-ui/src/api/smsb/digital/deviceGroup/index.ts

@@ -18,17 +18,6 @@ export const listDeviceGroup = (query?: DeviceGroupQuery): AxiosPromise<DeviceGr
   });
 };
 
-/**
- * 查询设备详情
- * @param id
- */
-export const getDevicesInfo = (id: string | number): AxiosPromise<DeviceGroupRelVO[]> => {
-  return request({
-    url: '/digital/deviceGroupRel/getGroupRelByGroupId/' + id,
-    method: 'get'
-  });
-};
-
 /**
  * 查询设备组信息详细
  * @param id

+ 11 - 0
smsb-plus-ui/src/api/smsb/digital/deviceGroupRel/index.ts

@@ -15,6 +15,17 @@ export const listDeviceGroupRel = (query?: DeviceGroupRelQuery): AxiosPromise<De
   });
 };
 
+/**
+ * 查询设备详情
+ * @param id
+ */
+export const getGroupRelByGroupId = (id: string | number): AxiosPromise<DeviceGroupRelVO[]> => {
+  return request({
+    url: '/digital/deviceGroupRel/getGroupRelByGroupId/' + id,
+    method: 'get'
+  });
+};
+
 /**
  * 查询设备组对应关系表详细
  * @param id

+ 19 - 2
smsb-plus-ui/src/api/smsb/digital/deviceGroupRel/types.ts

@@ -1,7 +1,6 @@
 export interface DeviceGroupRelVO {
   /**
    * 对应表id
-
    */
   id: string | number;
 
@@ -17,6 +16,12 @@ export interface DeviceGroupRelVO {
    */
   deviceIdentifier: string | number;
 
+  /**
+   * 设备名称
+
+   */
+  deviceName: string;
+
   /**
    * 场景序号
 
@@ -56,6 +61,12 @@ export interface DeviceGroupRelForm extends BaseEntity {
    */
   deviceIdentifier?: string | number;
 
+  /**
+   * 设备名称
+
+   */
+  deviceName?: string;
+
   /**
    * 场景序号
 
@@ -85,11 +96,17 @@ export interface DeviceGroupRelQuery extends PageQuery {
   deviceGroupId?: string | number;
 
   /**
-   * 设备id
+   * 设备identifier
 
    */
   deviceIdentifier?: string | number;
 
+  /**
+   * 设备名称
+
+   */
+  deviceName?: string | number;
+
   /**
    * 场景序号
 

+ 204 - 110
smsb-plus-ui/src/views/smsb/deviceGroup/index.vue

@@ -1,18 +1,19 @@
 <template>
   <div class="p-2">
-    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
-      <div v-show="showSearch" class="mb-[10px]">
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter"
+                :leave-active-class="proxy?.animate.searchAnimate.leave">
+      <div v-show="showSearch" class="mb-[10px]" :style="{ marginTop: '10px', height: '60px' }">
         <el-card shadow="hover">
           <el-form ref="queryFormRef" :model="queryParams" :inline="true">
-            <el-form-item label="设备组名称" prop="name">
-              <el-input v-model="queryParams.name" placeholder="请输入设备组名称" clearable @keyup.enter="handleQuery" />
-            </el-form-item>
-            <el-form-item label="设备组容量" prop="capacity">
-              <el-input v-model="queryParams.capacity" placeholder="请输入设备组容量" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="设备组" prop="name" label-width="60px">
+              <el-input v-model="queryParams.name" placeholder="请输入设备组名称" clearable @keyup.enter="handleQuery"/>
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+              <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['digital:deviceGroup:add']">
+                新增设备组
+              </el-button>
             </el-form-item>
           </el-form>
         </el-card>
@@ -20,58 +21,75 @@
     </transition>
 
     <el-card shadow="never">
-      <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['digital:deviceGroup:add']">新增</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['digital:deviceGroup:edit']">修改</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['digital:deviceGroup:remove']">删除</el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['digital:deviceGroup:export']">导出</el-button>
-          </el-col>
-          <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
-        </el-row>
-      </template>
+      <!--      <template #header>
+              <el-row :gutter="10" class="mb8">
+                <el-col :span="1.5">
 
-      <el-table v-loading="loading" :data="deviceGroupList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="设备组id" align="center" prop="id" v-if="true" />
-        <el-table-column label="设备组名称" align="center" prop="name" />
-        <el-table-column label="设备组容量" align="center" prop="capacity" />
-        <el-table-column label="备注" align="center" prop="remark" />
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template #default="scope">
-            <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['digital:deviceGroup:edit']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="详情" placement="top">
-              <el-button link type="primary" icon="View" @click="handleDevicesInfo(scope.row)" v-hasPermi="['digital:deviceGroup:query']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['digital:deviceGroup:remove']"></el-button>
-            </el-tooltip>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
+                             v-hasPermi="['digital:deviceGroup:edit']">修改
+                  </el-button>
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
+                             v-hasPermi="['digital:deviceGroup:remove']">删除
+                  </el-button>
+                </el-col>
+                <el-col :span="1.5">
+                  <el-button type="warning" plain icon="Download" @click="handleExport"
+                             v-hasPermi="['digital:deviceGroup:export']">导出
+                  </el-button>
+                </el-col>
+                <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+              </el-row>
+            </template>-->
+      <div class="table-content">
+        <el-table v-loading="loading" :data="deviceGroupList" @selection-change="handleSelectionChange">
+          <!--          <el-table-column type="selection" width="55" align="center"/>-->
+          <el-table-column label="" align="left" prop="" width="15"/>
+          <el-table-column label="ID" align="left" prop="id" v-if="true" width="175"/>
+          <el-table-column label="设备组名称" align="left" prop="name"/>
+          <el-table-column label="设备组容量" align="center" prop="capacity" width="120"/>
+          <el-table-column label="备注" align="left" prop="remark" :show-overflow-tooltip="true"/>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
+            <template #default="scope">
+              <el-tooltip content="修改" placement="top">
+                <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
+                           v-hasPermi="['digital:deviceGroup:edit']"></el-button>
+              </el-tooltip>
+              <el-tooltip content="详情" placement="top">
+                <el-button link type="primary" icon="View" @click="handleDevicesInfo(scope.row)"
+                           v-hasPermi="['digital:deviceGroup:query']"></el-button>
+              </el-tooltip>
+              <el-tooltip content="删除" placement="top">
+                <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+                           v-hasPermi="['digital:deviceGroup:remove']"></el-button>
+              </el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+                  v-model:limit="queryParams.pageSize" @pagination="getList"/>
     </el-card>
     <!-- 添加或修改设备组信息对话框 -->
-    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
-      <el-form ref="deviceGroupFormRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="设备组名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入设备组名称" />
-        </el-form-item>
-        <el-form-item label="设备组容量" prop="capacity">
-          <el-input v-model="form.capacity" placeholder="请输入设备组容量" />
-        </el-form-item>
+    <el-dialog :title="dialog.title" v-model="dialog.visible" width="1000px" append-to-body>
+      <el-form ref="deviceGroupFormRef" :model="form" :rules="rules" label-width="50px">
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="名称" prop="name">
+              <el-input v-model="form.name" placeholder="请输入设备组名称"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="容量" prop="capacity">
+              <el-input v-model="form.capacity" placeholder="请输入设备组容量"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
+          <el-input v-model="form.remark" type="textarea" :rows="5" placeholder="请输入备注"/>
         </el-form-item>
       </el-form>
       <template #footer>
@@ -82,51 +100,78 @@
       </template>
     </el-dialog>
     <!-- 查看设备组内的设备详情 -->
-    <el-dialog :title="devicesLog.title" v-model="devicesLog.visible" width="800px" append-to-body>
-      <el-table v-loading="loading" :data="deviceList" @selection-change="handleDevicesSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="设备标识" align="center" prop="deviceIdentifier" />
-        <el-table-column label="场景名称" align="center" prop="sceneName" />
-        <el-table-column label="备注" align="center" prop="remark" />
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template #default="scope">
-            <el-tooltip content="修改" placement="top">
-              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['digital:deviceGroup:edit']"></el-button>
-            </el-tooltip>
-            <el-tooltip content="删除" placement="top">
-              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['digital:deviceGroup:remove']"></el-button>
-            </el-tooltip>
-          </template>
-        </el-table-column>
-      </el-table>
+    <el-dialog :title="devicesLog.title" v-model="devicesLog.visible" width="1200px" append-to-body>
+      <el-card shadow="never">
+        <template #header>
+          <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button type="primary" plain icon="Plus" @click="handleAddDevice"
+                         v-hasPermi="['digital:deviceGroup:add']">新增
+              </el-button>
+            </el-col>
+          </el-row>
+        </template>
+        <el-table v-loading="loading" :data="deviceList" @selection-change="handleDevicesSelectionChange">
+          <!--          <el-table-column type="selection" width="55" align="center"/>-->
+          <el-table-column label="设备名称" align="left" prop="deviceName" :show-overflow-tooltip="true"/>
+          <el-table-column label="场景名称" align="center" prop="sceneName" width="200" :show-overflow-tooltip="true"/>
+          <el-table-column label="场景序号" align="center" prop="sceneSort" width="150"/>
+          <el-table-column label="备注" align="left" prop="remark" width="250" :show-overflow-tooltip="true"/>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
+            <template #default="scope">
+              <!--            <el-tooltip content="修改" placement="top">-->
+              <!--              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['digital:deviceGroup:edit']"></el-button>-->
+              <!--            </el-tooltip>-->
+              <el-tooltip content="删除" placement="top">
+                <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
+                           v-hasPermi="['digital:deviceGroup:remove']"></el-button>
+              </el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+
+      </el-card>
 
       <template #footer>
         <div class="dialog-footer">
-          <el-button @click="cancel">新 增</el-button>
           <el-button @click="cancel">取 消</el-button>
         </div>
       </template>
     </el-dialog>
 
-    <el-dialog :title="addDeviceLog.title" v-model="addDeviceLog.visible" width="500px" append-to-body>
-      <el-form ref="deviceGroupRelFormRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="设备组id" prop="deviceGroupId">
-          <el-input v-model="form.name" placeholder="请输入设备组id" />
-        </el-form-item>
-        <el-form-item label="设备标识" prop="deviceIdentifier">
-          <el-input v-model="form.capacity" placeholder="请输入设备标识" />
-        </el-form-item>
-        <el-form-item label="场景名称" prop="sceneName">
-          <el-input v-model="form.sceneName" placeholder="请输入场景名称" />
+    <el-dialog :title="addDeviceLog.title" v-model="addDeviceLog.visible" width="800px" append-to-body>
+      <el-form ref="deviceGroupRelFormRef" :model="dataRel.form" :rules="dataRel.rules" label-width="80px">
+        <el-form-item label="选择设备" prop="deviceIdentifier">
+          <el-select v-model="dataRel.form.deviceIdentifier" placeholder="请选择设备" clearable
+                     @change="handleQueryRel">
+            <el-option v-for="item in devices" :key="item.name" :value="item.identifier"
+                       :label="item.name"></el-option>
+          </el-select>
         </el-form-item>
+        <!--        <el-form-item label="设备组id" prop="deviceGroupId">-->
+        <!--          <el-input v-model="dataRel.form.deviceName" placeholder="请输入设备组id" />-->
+        <!--        </el-form-item>-->
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="场景名称" prop="sceneName">
+              <el-input v-model="dataRel.form.sceneName" placeholder="请输入场景名称"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="场景序号" prop="sceneSort">
+              <el-input-number :min="1" style="width: 280px" v-model="dataRel.form.sceneSort"
+                               placeholder="请输入场景序号"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
         <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
+          <el-input v-model="dataRel.form.remark" type="textarea" :rows="3" placeholder="请输入备注"/>
         </el-form-item>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
-          <el-button @click="cancel">取 消</el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="submitFormRel">确 定</el-button>
+          <el-button @click="cancelAddDevice">取 消</el-button>
         </div>
       </template>
     </el-dialog>
@@ -140,15 +185,24 @@ import {
   delDeviceGroup,
   addDeviceGroup,
   updateDeviceGroup,
-  getDevicesInfo
 } from '@/api/smsb/digital/deviceGroup';
-import { DeviceGroupVO, DeviceGroupQuery, DeviceGroupForm } from '@/api/smsb/digital/deviceGroup/types';
-import { DeviceGroupRelVO, DeviceGroupRelForm, DeviceGroupRelQuery } from '@/api/smsb/digital/deviceGroupRel/types';
+import {
+  getGroupRelByGroupId,
+  addDeviceGroupRel
+} from '@/api/smsb/digital/deviceGroupRel';
+import {
+  listDevice
+} from '@/api/smsb/device/device';
+import {DeviceGroupVO, DeviceGroupQuery, DeviceGroupForm} from '@/api/smsb/digital/deviceGroup/types';
+import {DeviceGroupRelVO, DeviceGroupRelForm, DeviceGroupRelQuery} from '@/api/smsb/digital/deviceGroupRel/types';
+import {DeviceQuery, DeviceVO, DeviceForm} from '@/api/smsb/device/device_type';
 
-const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const {proxy} = getCurrentInstance() as ComponentInternalInstance;
 
 const deviceGroupList = ref<DeviceGroupVO[]>([]);
 const deviceList = ref<DeviceGroupRelVO[]>([]);
+const devices = ref<DeviceVO[]>([]);
+const groupId = ref<string | number>();
 const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
@@ -189,21 +243,20 @@ const data = reactive<PageData<DeviceGroupForm, DeviceGroupQuery>>({
     pageSize: 10,
     name: undefined,
     capacity: undefined,
-    params: {
-    }
+    params: {}
   },
   rules: {
     id: [
-      { required: true, message: "设备组id不能为空", trigger: "blur" }
+      {required: true, message: "设备组id不能为空", trigger: "blur"}
     ],
     name: [
-      { required: true, message: "设备组名称不能为空", trigger: "blur" }
+      {required: true, message: "设备组名称不能为空", trigger: "blur"}
     ],
     capacity: [
-      { required: true, message: "设备组容量不能为空", trigger: "blur" }
+      {required: true, message: "设备组容量不能为空", trigger: "blur"}
     ],
     remark: [
-      { required: false, message: "备注不能为空", trigger: "blur" }
+      {required: false, message: "备注不能为空", trigger: "blur"}
     ],
   }
 });
@@ -212,32 +265,35 @@ const initFormDataRel: DeviceGroupRelForm = {
   id: undefined,
   deviceGroupId: undefined,
   deviceIdentifier: undefined,
+  deviceName: undefined,
   sceneSort: undefined,
   sceneName: undefined,
   remark: undefined,
 }
-const dataRel = reactive<PageData<DeviceGroupRelForm, DeviceGroupRelQuery>>({
+const dataRel = reactive<PageData<DeviceGroupRelForm, DeviceQuery>>({
   form: {...initFormDataRel},
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    deviceGroupId: undefined,
-    deviceIdentifier: undefined,
-    sceneSort: undefined,
-    sceneName: undefined,
-    params: {
-    }
+    identifier: undefined,
+    name: undefined,
+    mac: undefined,
+    onlineStatus: undefined,
+    params: {}
   },
   rules: {
     id: [
-      {required: true, message: "对应表id不能为空", trigger: "blur"}
+      {required: false, message: "对应表id不能为空", trigger: "blur"}
     ],
     deviceGroupId: [
-      {required: true, message: "设备组id不能为空", trigger: "blur"}
+      {required: false, message: "设备组id不能为空", trigger: "blur"}
     ],
     deviceIdentifier: [
       {required: true, message: "设备标识不能为空", trigger: "blur"}
     ],
+    deviceName: [
+      {required: false, message: "设备标名称不能为空", trigger: "blur"}
+    ],
     sceneSort: [
       {required: true, message: "场景序号不能为空", trigger: "blur"}
     ],
@@ -245,12 +301,13 @@ const dataRel = reactive<PageData<DeviceGroupRelForm, DeviceGroupRelQuery>>({
       {required: true, message: "场景名称不能为空", trigger: "blur"}
     ],
     remark: [
-      {required: true, message: "备注不能为空", trigger: "blur"}
+      {required: false, message: "备注不能为空", trigger: "blur"}
     ],
   }
 });
 
-const { queryParams, form, rules } = toRefs(data);
+const {queryParams, form, rules} = toRefs(data);
+// const { queryParams, form, rules } = toRefs(dataRe);
 
 /** 查询设备组信息列表 */
 const getList = async () => {
@@ -261,11 +318,20 @@ const getList = async () => {
   loading.value = false;
 }
 
+const getListRel = async () => {
+  loading.value = true;
+  const res = await listDevice(dataRel.queryParams);
+  devices.value = res.rows;
+  total.value = res.total;
+  loading.value = false;
+}
+
 /** 设备组详情 */
 const handleDevicesInfo = async (row?: DeviceGroupVO) => {
   loading.value = true;
   const _id = row?.id || ids.value[0]
-  const res = await getDevicesInfo(_id);
+  groupId.value = row.id;
+  const res = await getGroupRelByGroupId(_id);
   deviceList.value = res.data;
   devicesLog.visible = true;
   devicesLog.title = "设备组详情";
@@ -275,6 +341,7 @@ const handleDevicesInfo = async (row?: DeviceGroupVO) => {
 /** 新增按钮操作 */
 const handleAddDevice = () => {
   reset();
+  handleQueryRel()
   addDeviceLog.visible = true;
   addDeviceLog.title = "添加设备";
 }
@@ -284,6 +351,10 @@ const cancel = () => {
   reset();
   dialog.visible = false;
   devicesLog.visible = false;
+}
+
+const cancelAddDevice = () => {
+  reset();
   addDeviceLog.visible = false;
 }
 
@@ -297,6 +368,12 @@ const reset = () => {
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
   getList();
+};
+
+/** 搜索按钮操作 */
+const handleQueryRel = () => {
+  dataRel.queryParams.pageNum = 1;
+  getListRel();
 }
 
 /** 重置按钮操作 */
@@ -336,15 +413,32 @@ const handleUpdate = async (row?: DeviceGroupVO) => {
   dialog.title = "修改设备组信息";
 }
 
+const submitFormRel = () => {
+  // console.log("groupId:" + groupId.value);
+  // console.log("dataRel:" + dataRel.form.deviceIdentifier);
+  dataRel.form.deviceGroupId = groupId.value;
+  deviceGroupRelFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      await addDeviceGroupRel(dataRel.form).finally(() => buttonLoading.value = false);
+      proxy?.$modal.msgSuccess("操作成功");
+      addDeviceLog.visible = false;
+      const res = await getGroupRelByGroupId(groupId.value);
+      deviceList.value = res.data;
+      // devicesLog.visible = true;
+      // devicesLog.title = "设备组详情";
+    }
+  });
+}
 /** 提交按钮 */
 const submitForm = () => {
   deviceGroupFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
       buttonLoading.value = true;
       if (form.value.id) {
-        await updateDeviceGroup(form.value).finally(() =>  buttonLoading.value = false);
+        await updateDeviceGroup(form.value).finally(() => buttonLoading.value = false);
       } else {
-        await addDeviceGroup(form.value).finally(() =>  buttonLoading.value = false);
+        await addDeviceGroup(form.value).finally(() => buttonLoading.value = false);
       }
       proxy?.$modal.msgSuccess("操作成功");
       dialog.visible = false;