ソースを参照

调整设备菜单及导入

yukai 2 年 前
コミット
6679e1bbb7

+ 51 - 33
src/views/iot/device/instance/component/excel.vue

@@ -1,30 +1,31 @@
 <template>
   <div class="system-edit-dic-container">
-    <el-dialog :title="(open_type ==='upload' ? '导入' : '导出') + '设备'" v-model="isShowDialog" width="769px">
+    <el-dialog :title="(open_type === 'upload' ? '导入' : '导出') + '设备'" v-model="isShowDialog" width="769px">
       <el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-       
+
         <el-form-item label="所属产品" prop="productId">
-          <el-select v-model="ruleForm.productId"  placeholder="请选择所属产品" class="w100">
+          <el-select v-model="ruleForm.productId" placeholder="请选择所属产品" class="w100">
             <el-option v-for="item in productData" :key="item.id" :label="item.name" :value="item.id" />
           </el-select>
         </el-form-item>
 
-        <el-form-item label="导入文件" prop="path" v-if="open_type ==='upload'">
-          <el-upload accept="xls,xlsx,csv" :show-file-list="false" :limit="1" 
-									:headers="headers" :action="uploadUrl" :on-success="updateImg">
-									<el-button>
-										<el-icon> <ele-Upload /> </el-icon>
-										上传文件
-									</el-button>
-								</el-upload>
-                <div>{{ruleForm.path}}</div>
+        <el-form-item label="导入文件" prop="path" v-if="open_type === 'upload'">
+          <el-upload accept="xls,xlsx,csv" :show-file-list="false"  :data="{ productId:ruleForm.productId }"  :limit="1" :headers="headers" :action="uploadUrl"
+            :on-success="updateImg">
+            <el-button>
+              <el-icon> <ele-Upload /> </el-icon>
+              上传文件
+            </el-button>
+          </el-upload>
+          <div>{{ ruleForm.path }}</div>
         </el-form-item>
-       
+
       </el-form>
       <template #footer>
         <span class="dialog-footer">
           <el-button @click="onCancel" size="default">取 消</el-button>
-          <el-button type="primary" @click="onSubmit" size="default">{{ open_type=== 'upload'  ? '导入设备' : '导出设备' }}</el-button>
+          <el-button type="primary" @click="onSubmit" size="default">{{ open_type === 'upload' ? '导入设备' : '导出设备'
+          }}</el-button>
         </span>
       </template>
     </el-dialog>
@@ -54,20 +55,22 @@ interface DicState {
   isShowDialog: boolean;
   ruleForm: RuleFormState;
   rules: {}
-  open_type:string;
+  open_type: string;
+  sproductId: number;
 }
 
 
 export default defineComponent({
   setup(prop, { emit }) {
-    
-const uploadUrl: string = getOrigin(import.meta.env.VITE_API_URL + "/common/singleFile");
-const headers = {
-			Authorization: 'Bearer ' + localStorage.token,
-		};
+
+    const uploadUrl: string = getOrigin(import.meta.env.VITE_API_URL + "/product/device/import");
+    const headers = {
+      Authorization: 'Bearer ' + localStorage.token,
+    };
     const formRef = ref<HTMLElement | null>(null);
     const tagRef = ref<HTMLElement | null>(null);
     const state = reactive<DicState>({
+      sproductId:0,
       isShowDialog: false,
       open_type: '',
       productData: [], // 分类数据
@@ -78,21 +81,24 @@ const headers = {
         productId: [{ required: true, message: '所属产品不能为空', trigger: 'blur' }],
       }
     });
+
     const updateImg = (res: any) => {
-			if (res.code === 0) {
-        state.ruleForm.path=res.data.path;
-				ElMessage.success('上传成功');
-			} else {
-				ElMessage.error(res.message);
-			}
-		};
+      if (res.code === 0) {
+        ElMessage.success('导入成功');
+       closeDialog(); // 关闭弹窗
+       emit('typeList')
+
+      } else {
+        ElMessage.error(res.message);
+      }
+    };
     // 打开弹窗
-    const openDialog = (type:string) => {
+    const openDialog = (type: string) => {
       resetForm();
       api.product.getLists({ status: 1 }).then((res: any) => {
         state.productData = res.product || [];
       });
-      state.open_type=type;
+      state.open_type = type;
       state.isShowDialog = true;
     };
     const resetForm = () => {
@@ -109,12 +115,21 @@ const headers = {
       closeDialog();
     };
     // 新增
+    const getCurrentTime = () => {
+      const date = new Date();
+      const year = date.getFullYear().toString();
+      const month = (date.getMonth() + 1).toString().padStart(2, '0');
+      const day = date.getDate().toString().padStart(2, '0');
+      const hours = date.getHours().toString().padStart(2, '0');
+      const minutes = date.getMinutes().toString().padStart(2, '0');
+      return year + month + day + hours + minutes;
+    }
     const onSubmit = () => {
       const formWrap = unref(formRef) as any;
       if (!formWrap) return;
       formWrap.validate((valid: boolean) => {
         if (valid) {
-          if (state.open_type ==='upload') {
+          if (state.open_type === 'upload') {
             api.device.import(state.ruleForm).then((res: any) => {
               ElMessage.success('导入成功');
               closeDialog(); // 关闭弹窗
@@ -122,10 +137,13 @@ const headers = {
 
 
           } else {
+            const selectedProduct = state.productData.find((item) => item.id === state.ruleForm.productId);
+            if (selectedProduct) {
+
+              api.device.export({ productId: state.ruleForm.productId }).then((res: any) => downloadFile(res, selectedProduct.name + "-" + getCurrentTime() + ".xlsx"))
+              closeDialog(); // 关闭弹窗
+            }
 
-            
-            api.device.export({ productId: state.ruleForm.productId }).then((res: any) => downloadFile(res))
-            closeDialog(); // 关闭弹窗
 
           }
         }

+ 61 - 37
src/views/iot/device/instance/detail.vue

@@ -3,7 +3,8 @@
     <div class="content">
       <div class="cont_box">
         <div class="title">设备:{{ detail.name }}</div>
-        <div class="pro-status"><span :class="developer_status == 2 ? 'on' : 'off'"></span>{{ developer_status == 2 ? '在线' : '离线' }}</div>
+        <div class="pro-status"><span :class="developer_status == 2 ? 'on' : 'off'"></span>{{ developer_status == 2 ? '在线'
+          : '离线' }}</div>
 
         <!-- <div class="pro-option" @click="CkOption">{{ developer_status == 2 ? '下线' : '上线' }}</div> -->
       </div>
@@ -49,15 +50,16 @@
                   </div>
                 </div>
 
-                <div class="statusname" v-if="item.type!='object'">{{ item.value }}{{ item.unit }}</div>
+                <div class="statusname" v-if="item.type != 'object'">{{ item.value }}{{ item.unit }}</div>
                 <div v-else>
-                 <div class="oblist" v-for="(vare, name) in item.value">
-                    <div class="name">{{name}}:</div>
-                    <div class="name">{{vare}}</div>
-                </div>
+                  <div class="oblist" v-for="(vare, name) in item.value">
+                    <div class="name">{{ name }}:</div>
+                    <div class="name">{{ vare }}</div>
+                  </div>
                 </div>
                 <div class="">
-                  <devantd :json="item.list" :antdid="item.key" v-if="item.type == 'int' || item.type == 'float' || item.type == 'string'" />
+                  <devantd :json="item.list" :antdid="item.key"
+                    v-if="item.type == 'int' || item.type == 'float' || item.type == 'string'" />
                 </div>
               </div>
             </div>
@@ -80,7 +82,10 @@
                   <th class="ant-descriptions-item-label ant-descriptions-item-colon">设备名称</th>
                   <td class="ant-descriptions-item-content" colspan="1">{{ detail.name }}</td>
                   <th class="ant-descriptions-item-label ant-descriptions-item-colon">所属产品</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ detail.productName }}</td>
+                  <td class="ant-descriptions-item-content" colspan="1">
+                    <router-link :to="'/iotmanager/device/product/detail/' + prodetail.id" class="link-type">{{
+                      detail.productName }} </router-link>
+                  </td>
 
                 </tr>
                 <tr class="ant-descriptions-row">
@@ -153,9 +158,12 @@
                   <el-table-column label="说明" prop="desc" :show-overflow-tooltip="true" />
                   <el-table-column label="操作" width="300" align="center" fixed="right">
                     <template #default="scope">
-                      <el-button size="small" text type="warning" v-auth="'edit'" @click="onEditAttr(scope.row)">修改</el-button>
-                      <el-button size="small" text type="danger" v-auth="'del'" @click="onRowDel(scope.row.key, 'attr')">删除</el-button>
-                      <el-button size="small" text type="primary" v-auth="'edit'" @click="setAttr(scope.row)">设置属性</el-button>
+                      <el-button size="small" text type="warning" v-auth="'edit'"
+                        @click="onEditAttr(scope.row)">修改</el-button>
+                      <el-button size="small" text type="danger" v-auth="'del'"
+                        @click="onRowDel(scope.row.key, 'attr')">删除</el-button>
+                      <el-button size="small" text type="primary" v-auth="'edit'"
+                        @click="setAttr(scope.row)">设置属性</el-button>
                     </template>
                   </el-table-column>
                 </el-table>
@@ -175,8 +183,10 @@
                   <el-table-column label="描述" prop="desc" :show-overflow-tooltip="true" />
                   <el-table-column label="操作" width="300" align="center" fixed="right">
                     <template #default="scope">
-                      <el-button size="small" text type="warning" v-auth="'edit'" @click="onEditFun(scope.row)">修改</el-button>
-                      <el-button size="small" text type="danger" v-auth="'del'" @click="onRowDel(scope.row.key, 'fun')">删除</el-button>
+                      <el-button size="small" text type="warning" v-auth="'edit'"
+                        @click="onEditFun(scope.row)">修改</el-button>
+                      <el-button size="small" text type="danger" v-auth="'del'"
+                        @click="onRowDel(scope.row.key, 'fun')">删除</el-button>
                     </template>
                   </el-table-column>
                 </el-table>
@@ -203,8 +213,10 @@
 
                   <el-table-column label="操作" width="300" align="center" fixed="right">
                     <template #default="scope">
-                      <el-button size="small" text type="warning" v-auth="'edit'" @click="onEditEvent(scope.row)">修改</el-button>
-                      <el-button size="small" text type="danger" v-auth="'del'" @click="onRowDel(scope.row.key, 'event')">删除</el-button>
+                      <el-button size="small" text type="warning" v-auth="'edit'"
+                        @click="onEditEvent(scope.row)">修改</el-button>
+                      <el-button size="small" text type="danger" v-auth="'del'"
+                        @click="onRowDel(scope.row.key, 'event')">删除</el-button>
                     </template>
                   </el-table-column>
                 </el-table>
@@ -235,18 +247,22 @@
                   <el-table-column label="描述" prop="desc" :show-overflow-tooltip="true" />
                   <el-table-column label="操作" width="300" align="center" fixed="right">
                     <template #default="scope">
-                      <el-button size="small" text type="warning" v-auth="'edit'" @click="onEditTag(scope.row)">修改</el-button>
-                      <el-button size="small" text type="danger" v-auth="'del'" @click="onRowDel(scope.row.key, 'tab')">删除</el-button>
+                      <el-button size="small" text type="warning" v-auth="'edit'"
+                        @click="onEditTag(scope.row)">修改</el-button>
+                      <el-button size="small" text type="danger" v-auth="'del'"
+                        @click="onRowDel(scope.row.key, 'tab')">删除</el-button>
                     </template>
                   </el-table-column>
                 </el-table>
               </el-tab-pane>
             </el-tabs>
-            <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="getList()" />
+            <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum"
+              v-model:limit="tableData.param.pageSize" @pagination="getList()" />
           </div>
         </el-tab-pane>
         <el-tab-pane label="设备功能" name="5">
-          <functionCom :device-key="detail.key" :product-key="prodetail.key" v-if="detail.key && prodetail.key && activeName === '5'"></functionCom>
+          <functionCom :device-key="detail.key" :product-key="prodetail.key"
+            v-if="detail.key && prodetail.key && activeName === '5'"></functionCom>
         </el-tab-pane>
         <el-tab-pane label="日志管理" name="4">
           <div class="system-user-search mb15">
@@ -258,7 +274,8 @@
               </el-form-item>
 
               <el-form-item label="创建时间" prop="dateRange">
-                <el-date-picker v-model="logtableData.param.dateRange" size="default" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+                <el-date-picker v-model="logtableData.param.dateRange" size="default" value-format="YYYY-MM-DD"
+                  type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
               </el-form-item>
               <el-form-item>
                 <el-button size="default" type="primary" class="ml10" @click="getlog">
@@ -288,7 +305,8 @@
             </el-table-column>
           </el-table>
 
-          <pagination v-show="logtableData.total > 0" :total="logtableData.total" v-model:page="logtableData.param.pageNum" v-model:limit="logtableData.param.pageSize" @pagination="getlog" />
+          <pagination v-show="logtableData.total > 0" :total="logtableData.total"
+            v-model:page="logtableData.param.pageNum" v-model:limit="logtableData.param.pageSize" @pagination="getlog" />
         </el-tab-pane>
         <el-tab-pane v-if="prodetail.deviceType == '网关'" label="子设备" name="6">
           <div class="wu-box">
@@ -296,11 +314,13 @@
               <div class="title">子设备列表</div>
               <div>
                 <el-button v-auth="'mutipleBind'" type="primary" @click="onOpenMutipleBind()">批量绑定</el-button>
-                <el-button v-auth="'cancleMutipleBind'" :disabled="!deviceKeyList.length" type="primary" @click="mutipleUnbind()">批量解绑</el-button>
+                <el-button v-auth="'cancleMutipleBind'" :disabled="!deviceKeyList.length" type="primary"
+                  @click="mutipleUnbind()">批量解绑</el-button>
               </div>
             </div>
 
-            <el-table :data="deviceTableData.data" style="width: 100%" @selection-change="handleSelectionChange" v-loading="deviceTableData.loading">
+            <el-table :data="deviceTableData.data" style="width: 100%" @selection-change="handleSelectionChange"
+              v-loading="deviceTableData.loading">
               <el-table-column type="selection" width="55" align="center" />
               <el-table-column label="标识" prop="key" width="130" :show-overflow-tooltip="true" />
               <el-table-column label="设备名称" prop="name" :show-overflow-tooltip="true" />
@@ -318,12 +338,16 @@
 
               <el-table-column label="操作" width="160" align="center" fixed="right">
                 <template #default="scope">
-                  <el-button size="small" text type="danger" v-auth="'del'" @click="deleteSubDevice(scope.row)">删除</el-button>
-                  <el-button size="small" text type="warning" v-auth="'detail'" @click="onOpenDetail(scope.row)">详情</el-button>
+                  <el-button size="small" text type="danger" v-auth="'del'"
+                    @click="deleteSubDevice(scope.row)">删除</el-button>
+                  <el-button size="small" text type="warning" v-auth="'detail'"
+                    @click="onOpenDetail(scope.row)">详情</el-button>
                 </template>
               </el-table-column>
             </el-table>
-            <pagination v-show="deviceTableData.total > 0" :total="deviceTableData.total" v-model:page="deviceTableData.param.pageNum" v-model:limit="deviceTableData.param.pageSize" @pagination="getDeviceTableData" />
+            <pagination v-show="deviceTableData.total > 0" :total="deviceTableData.total"
+              v-model:page="deviceTableData.param.pageNum" v-model:limit="deviceTableData.param.pageSize"
+              @pagination="getDeviceTableData" />
           </div>
 
         </el-tab-pane>
@@ -751,8 +775,8 @@ export default defineComponent({
               temps.push(a);
             }
           });
-          if(item.type=='object'){
-            item.value=JSON.parse(item.value);
+          if (item.type == 'object') {
+            item.value = JSON.parse(item.value);
           }
 
           temp[index]['name'] = item.name
@@ -865,15 +889,16 @@ export default defineComponent({
 });
 </script>
 <style>
-.oblist{
+.oblist {
   display: flex;
-    flex-direction: row;
-    align-items: center;
-    padding-right: 5px;
-    flex: 1;
-    margin-top: 10px;
-    margin-left: 10px;
+  flex-direction: row;
+  align-items: center;
+  padding-right: 5px;
+  flex: 1;
+  margin-top: 10px;
+  margin-left: 10px;
 }
+
 .content {
   background: #fff;
   width: 100%;
@@ -1065,7 +1090,6 @@ tr {
   margin-top: 20px;
   height: 30px;
   line-height: 30px;
-}
-</style>
+}</style>
 
 

+ 66 - 47
src/views/iot/device/instance/index.vue

@@ -4,10 +4,12 @@
       <div class="system-user-search mb15">
         <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
           <el-form-item label="设备名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入产品名称" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
+            <el-input v-model="tableData.param.name" placeholder="请输入产品名称" clearable size="default" style="width: 240px"
+              @keyup.enter.native="typeList" />
           </el-form-item>
           <el-form-item label="设备标识" prop="key">
-            <el-input v-model="tableData.param.key" placeholder="请输入产品名称" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
+            <el-input v-model="tableData.param.key" placeholder="请输入产品名称" clearable size="default" style="width: 240px"
+              @keyup.enter.native="typeList" />
           </el-form-item>
 
           <el-form-item label="状态" prop="status" style="width: 200px;">
@@ -19,7 +21,9 @@
           </el-form-item>
 
           <el-form-item label="创建时间" prop="dateRange">
-            <el-date-picker v-model="tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+            <el-date-picker v-model="tableData.param.dateRange" size="default" style="width: 240px"
+              value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期"
+              end-placeholder="结束日期"></el-date-picker>
           </el-form-item>
           <el-form-item>
             <el-button size="default" type="primary" class="ml10" @click="typeList">
@@ -46,37 +50,47 @@
               </el-icon>
               删除
             </el-button>
-            <el-button size="default" type="success" class="ml10" @click="setDeviceStatus1(null)" v-auth="'del'">
-              <el-icon>
-                <ele-Delete />
-              </el-icon>
-              批量启用
-            </el-button>
-            <el-button size="default" type="warning" class="ml10" @click="setDeviceStatus0(null)" v-auth="'del'">
-              <el-icon>
-                <ele-Delete />
-              </el-icon>
-              批量禁用
-            </el-button>
-
-            <el-button size="default"  class="ml10" @click="onOpenexcelDic('upload')" v-auth="'add'">
-              <el-icon>
-                <ele-Upload />
-              </el-icon>
-              导入设备
-            </el-button>
-            <el-button size="default"  class="ml10" @click="onOpenexcelDic('down')" v-auth="'add'">
-              <el-icon>
-                <ele-Download />
-              </el-icon>
-              导出设备
-            </el-button>
 
-           
+            <el-dropdown>
+              <el-button type="danger" class="ml10">
+                更多操作<el-icon class="el-icon--right"><arrow-down /></el-icon>
+              </el-button>
+              <template #dropdown>
+                <el-dropdown-menu>
+                  <el-dropdown-item> <el-button size="default" type="success" @click="setDeviceStatus1(null)"
+                     >
+                      <el-icon>
+                        <ele-Delete />
+                      </el-icon>
+                      批量启用
+                    </el-button></el-dropdown-item>
+                  <el-dropdown-item><el-button size="default" type="warning" @click="setDeviceStatus0(null)"
+                     >
+                      <el-icon>
+                        <ele-Delete />
+                      </el-icon>
+                      批量禁用
+                    </el-button></el-dropdown-item>
+                  <el-dropdown-item> <el-button size="default" @click="onOpenexcelDic('upload')" >
+                      <el-icon>
+                        <ele-Upload />
+                      </el-icon>
+                      导入设备
+                    </el-button></el-dropdown-item>
+                  <el-dropdown-item><el-button size="default" @click="onOpenexcelDic('down')" >
+                      <el-icon>
+                        <ele-Download />
+                      </el-icon>
+                      导出设备
+                    </el-button></el-dropdown-item>
+                </el-dropdown-menu>
+              </template>
+            </el-dropdown>
           </el-form-item>
         </el-form>
       </div>
-      <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange" v-loading="tableData.loading">
+      <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange"
+        v-loading="tableData.loading">
         <el-table-column type="selection" width="55" align="center" />
         <!--        <el-table-column label="ID" align="center" prop="id" width="60" v-col="'id'" />-->
         <el-table-column label="标识" prop="key" width="130" :show-overflow-tooltip="true" v-col="'key'" />
@@ -87,12 +101,13 @@
 
         <el-table-column prop="status" label="状态" width="100" align="center" v-col="'status'">
           <template #default="scope">
-            <el-tag type="info" size="small" v-if="scope.row.status==1">离线</el-tag>
-            <el-tag type="success" size="small" v-if="scope.row.status==2">在线</el-tag>
-            <el-tag type="info" size="small" v-if="scope.row.status==0">未启用</el-tag>
+            <el-tag type="info" size="small" v-if="scope.row.status == 1">离线</el-tag>
+            <el-tag type="success" size="small" v-if="scope.row.status == 2">在线</el-tag>
+            <el-tag type="info" size="small" v-if="scope.row.status == 0">未启用</el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="registryTime" label="激活时间" align="center" width="150" v-col="'registryTime'"></el-table-column>
+        <el-table-column prop="registryTime" label="激活时间" align="center" width="150"
+          v-col="'registryTime'"></el-table-column>
         <!--        <el-table-column prop="lastOnlineTime" label="最后上线时间" align="center" width="150" v-col="'lastOnlineTime'"></el-table-column>-->
         <el-table-column prop="desc" label="说明" v-col="'desc'"></el-table-column>
 
@@ -100,17 +115,21 @@
           <template #default="scope">
 
             <!-- <el-button size="small" text type="primary" @click="onOpenDetail(scope.row)">详情</el-button> -->
-            <router-link :to="'/iotmanager/device/instance/' + scope.row.id" class="link-type" style="padding-right: 12px;font-size: 12px;color: #409eff;" v-auth="'detail'">
+            <router-link :to="'/iotmanager/device/instance/' + scope.row.id" class="link-type"
+              style="padding-right: 12px;font-size: 12px;color: #409eff;" v-auth="'detail'">
               <span>详情</span>
             </router-link>
             <el-button size="small" text type="warning" @click="onOpenEditDic(scope.row)" v-auth="'edit'">修改</el-button>
-            <el-button size="small" text type="success" @click="onActionStatus(scope.row)" v-if="scope.row.status==0" v-auth="'status'">启用</el-button>
-            <el-button size="small" text type="primary" @click="onActionStatus(scope.row)" v-if="scope.row.status>0" v-auth="'status'">停用</el-button>
+            <el-button size="small" text type="success" @click="onActionStatus(scope.row)" v-if="scope.row.status == 0"
+              v-auth="'status'">启用</el-button>
+            <el-button size="small" text type="primary" @click="onActionStatus(scope.row)" v-if="scope.row.status > 0"
+              v-auth="'status'">停用</el-button>
             <el-button size="small" text type="info" @click="onRowDel(scope.row)" v-auth="'del'">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
+      <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum"
+        v-model:limit="tableData.param.pageSize" @pagination="typeList" />
     </el-card>
     <EditDic ref="editDicRef" @typeList="typeList" />
     <ExcelDic ref="excelDicRef" @typeList="typeList" />
@@ -123,6 +142,7 @@ import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
 import EditDic from './component/edit.vue';
 import ExcelDic from './component/excel.vue';
 import api from '/@/api/device';
+import { ArrowDown } from '@element-plus/icons-vue'
 
 
 // 定义接口来定义对象的类型
@@ -150,10 +170,9 @@ interface TableDataState {
     };
   };
 }
-
 export default defineComponent({
   name: 'deviceInstance',
-  components: { EditDic,ExcelDic },
+  components: { EditDic, ExcelDic, ArrowDown },
   setup() {
     const addDicRef = ref();
     const editDicRef = ref();
@@ -200,14 +219,14 @@ export default defineComponent({
     const onOpenEditDic = (row: TableDataRow) => {
       editDicRef.value.openDialog(row);
     };
-    
 
-    const onOpenexcelDic = (type:string) => {
+
+    const onOpenexcelDic = (type: string) => {
       excelDicRef.value.openDialog(type);
     };
-    
+
     //批量启用
-    const setDeviceStatus1=(row: TableDataRow)=>{
+    const setDeviceStatus1 = (row: TableDataRow) => {
       let ids: number[] = [];
       if (row) {
         ids = [row.id];
@@ -224,7 +243,7 @@ export default defineComponent({
         type: 'warning',
       })
         .then(() => {
-          api.device.setDeviceStatus({ids:ids,status:1}).then(() => {
+          api.device.setDeviceStatus({ ids: ids, status: 1 }).then(() => {
             ElMessage.success('启用成功');
             typeList();
           });
@@ -233,7 +252,7 @@ export default defineComponent({
     }
 
     //批量禁用
-    const setDeviceStatus0=(row: TableDataRow)=>{
+    const setDeviceStatus0 = (row: TableDataRow) => {
       let ids: number[] = [];
       if (row) {
         ids = [row.id];
@@ -250,7 +269,7 @@ export default defineComponent({
         type: 'warning',
       })
         .then(() => {
-          api.device.setDeviceStatus({ids:ids,status:0}).then(() => {
+          api.device.setDeviceStatus({ ids: ids, status: 0 }).then(() => {
             ElMessage.success('禁用成功');
             typeList();
           });