Kaynağa Gözat

fix: 优化参数,修复设备主页面详情页的编辑器报红提示

yanglzh 1 yıl önce
ebeveyn
işleme
34db0f4527

+ 11 - 11
src/api/device/index.ts

@@ -13,16 +13,16 @@ export default {
     // 获取设备接入信息 /product/?id=35
     connect_intro: (productKey: string) => get('/product/connect_intro', { productKey }),
     getList: (params: object) => get('/product/page_list', params),
-    getLists: (params: object) => get('/product/list', params),
+    getLists: (params?: object) => get('/product/list', params),
     add: (data: object) => post('/product/add', data),
-    delete: (ids: number) => del('/product/del', { ids }),
+    delete: (keys: string[]) => del('/product/del', { keys }),
     edit: (data: object) => put('/product/edit', data),
-    detail: (productKey: string) => get('/product/detail', { productKey }),
+    detail: (productKey: string | string[]) => get('/product/detail', { productKey }),
     message_protocol_list: (params: object) => get('/product/protocol/message_protocol_list', params),
     trunsport_protocol_list: (params: object) => get('/product/protocol/trunsport_protocol_list', params),
     getDataType: (params: object) => get('/product/tsl/data_type', params),
-    deploy: (data: object) => post('/product/deploy', data),
-    undeploy: (data: object) => post('/product/undeploy', data),
+    deploy: (productKey: any) => post('/product/deploy', { productKey }),
+    undeploy: (productKey: any) => post('/product/undeploy', { productKey }),
     event: (data: object) => get('/product/tsl/event/all', data),
     getSubList: () => get('/product/sub_list'),
     export: (params: object) => file('/product/tsl/export', params),
@@ -43,16 +43,16 @@ export default {
     getList: (params: object) => get('/product/device/page_list', params),
     add: (data: object) => post('/product/device/add', data),
     edit: (data: object) => put('/product/device/edit', data),
-    del: (ids: number) => del('/product/device/del', { ids }),
-    detail: (deviceKey: string) => get('/product/device/detail', { deviceKey }),
+    del: (keys: string[]) => del('/product/device/del', { keys }),
+    detail: (deviceKey: any) => get('/product/device/detail', { deviceKey }),
     getLogList: (params: object) => get('/product/log/search', params),
     getlogcate: (params: object) => get('/product/log/type', params),
     getrun_status: (params: object) => get('/product/device/run_status', params),
     getLogDetail: (params: object) => get('/product/device/property/list', params),
     devonline: (data: object) => post('/product/device/online', data),
     devoffline: (data: object) => post('/product/device/offline', data),
-    devdeploy: (data: object) => post('/product/device/deploy', data),
-    devundeploy: (data: object) => post('/product/device/undeploy', data),
+    devdeploy: (deviceKey: string) => post('/product/device/deploy', { deviceKey }),
+    devundeploy: (deviceKey: string) => post('/product/device/undeploy', { deviceKey }),
   },
   dept: {
     getList: (params: object) => get('/system/dept/tree', params),
@@ -105,14 +105,14 @@ export default {
     import: (data: object) => post('/product/device/import', data),
     export: (data: object) => file('/product/device/export', data),
   },
-  dev_asset:{
+  dev_asset: {
     getList: (params: object) => get('/product/dev_asset/list', params),
     add: (params: object) => post('/product/dev_asset/add', params),
     edit: (params: object) => put('/product/dev_asset/edit', params),
     detail: (params: object) => get('/product/dev_asset/get', params),
     delete: (params: object) => del('/product/dev_asset/delete', params),
   },
-  dev_asset_metadata:{
+  dev_asset_metadata: {
     getList: (params: object) => get('/product/dev_asset_metadata/list', params),
     getProKey: (params: object) => get('/product/dev_asset_metadata/key', params),
     add: (params: object) => post('/product/dev_asset_metadata/add', params),

+ 0 - 22
src/views/iot/device/instance/component/list.vue

@@ -37,28 +37,6 @@ interface DicState {
 	isShowDialog: boolean;
 }
 
-// 定义接口来定义对象的类型
-interface TableDataRow {
-	id: number;
-	name: string;
-	key: string;
-
-	createBy: string;
-}
-interface TableDataState {
-	ids: number[];
-	tableData: {
-		data: Array<TableDataRow>;
-		total: number;
-		loading: boolean;
-		param: {
-			pageNum: number;
-			pageSize: number;
-      deviceKey: string;
-		};
-	};
-}
-
 export default defineComponent({
 	name: 'deviceEditPro',
 	setup(prop, { emit }) {

+ 1 - 4
src/views/iot/device/instance/component/subDevice.vue

@@ -1,8 +1,6 @@
 <template>
 	<div class="system-dic-container">
-		<el-dialog title="子设备详情" v-model="isShowSubDeviceDialog" width="80%">
-			<div class="dialog-wrapper" style="height: 80vh;overflow: auto;">
-
+		<el-dialog title="子设备详情" v-model="isShowSubDeviceDialog" fullscreen width="80%">
 				<div class="content">
 					<div class="cont_box">
 						<div class="title">设备:{{ detail.name }}</div>
@@ -277,7 +275,6 @@
 						</el-tab-pane>
 					</el-tabs>
 				</div>
-			</div>
 		</el-dialog>
 
 		<EditDic ref="editDicRef" @typeList="typeList" />

+ 34 - 104
src/views/iot/device/instance/detail.vue

@@ -5,13 +5,11 @@
         <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-option" @click="CkOption">{{ developer_status == 2 ? '下线' : '上线' }}</div> -->
       </div>
     </div>
 
     <div class="content-box page-full-part page-full">
       <el-tabs v-model="activeName" @tab-click="handleClick">
-
         <el-tab-pane label="运行状态" name="3">
           <div style=" display: flex;flex-wrap: wrap;">
             <div class="ant-card">
@@ -241,7 +239,6 @@
                   <el-option v-for="item in logTypeData" :key="item" :label="item" :value="item" />
                 </el-select>
               </el-form-item>
-
               <el-form-item label="创建时间" prop="dateRange">
                 <el-date-picker v-model="logtableData.param.dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
               </el-form-item>
@@ -284,7 +281,6 @@
                 <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-column type="selection" width="55" align="center" />
               <el-table-column label="标识" prop="key" width="130" show-overflow-tooltip />
@@ -314,38 +310,6 @@
         </el-tab-pane>
         <el-tab-pane label="设备档案" name="7" v-if="deviceAssetData">
           <el-form label-width="110px">
-
-            <!--            <FromData :DataList="Datalist" v-if="Datalist && Datalist.length > 0" disable="true"></FromData>-->
-            <!--            <div class="pro-box">-->
-            <!--              <div class="protitle">设备档案</div>-->
-            <!--              <div>-->
-            <!--                <el-button type="primary" v-auth="'edit'" @click="onOpenEditAsset">编辑</el-button>-->
-            <!--              </div>-->
-            <!--            </div>-->
-
-            <!--            <div class="ant-descriptions-view">-->
-            <!--              <table>-->
-            <!--                <tbody>-->
-            <!--                <tr class="ant-descriptions-row" v-for="(item, index) in dataList" :key="index">-->
-            <!--                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">{{ item.title }}</th>-->
-            <!--                  <td class="ant-descriptions-item-content" colspan="1">-->
-            <!--                    <view v-if="item.types === 'file'">-->
-            <!--                      <img :src="deviceAssetMetadata[item.name]" class="avatar" />-->
-            <!--                    </view>-->
-            <!--                    <view v-else>-->
-            <!--                      <view v-if="item.pattern">-->
-            <!--                        <el-link :href="deviceAssetMetadata[item.name]" type="primary" target="_blank">{{ deviceAssetMetadata[item.name] }}</el-link>-->
-            <!--                      </view>-->
-            <!--                      <view v-else>-->
-            <!--                        {{ deviceAssetMetadata[item.name] }}-->
-            <!--                      </view>-->
-            <!--                    </view>-->
-            <!--                  </td>-->
-            <!--                </tr>-->
-            <!--                </tbody>-->
-            <!--              </table>-->
-            <!--            </div>-->
-
             <div class="pro-box">
               <div class="protitle">设备档案</div>
               <div>
@@ -370,12 +334,8 @@
                 </el-descriptions-item>
               </view>
             </el-descriptions>
-
           </el-form>
         </el-tab-pane>
-
-
-
       </el-tabs>
     </div>
     <EditDic ref="editDicRef" @typeList="initData" />
@@ -392,7 +352,7 @@
     <EditAssetRef ref="editAssetRef" @getList="getDeviceAssetMetadata"></EditAssetRef>
 
     <el-dialog v-model="dialogVisible" title="日志数据内容" width="30%">
-      <JsonViewer :value="jsonData" boxed sort theme="jv-dark" @click="onKeyclick" />
+      <JsonViewer :value="jsonData" boxed sort theme="jv-dark" />
 
       <template #footer>
         <span class="dialog-footer">
@@ -408,7 +368,6 @@ import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
 import functionCom from './component/function.vue';
 import 'vue3-json-viewer/dist/index.css';
 import EditDic from './component/edit.vue';
-// import EditDic from '../product/component/editPro.vue';
 import EditAttr from '../product/component/editAttr.vue';
 import EditFun from '../product/component/editFun.vue';
 import EditEvent from '../product/component/editEvent.vue';
@@ -426,23 +385,22 @@ import EditAssetRef from "/@/views/iot/property/dossier/edit.vue";
 import { useRoute } from 'vue-router';
 
 interface TableDataState {
+  isShowDialog: boolean;
+  dialogVisible: boolean;
   phone: any[];
   certificate: any[];
+  logTypeData: any[];
+  prodetail: any;
+  areaData: any;
+  activetab: string;
+  activeName: string;
+  productKey: string;
+  jsonData: string;
   intro: string;
-  ids: number[];
+  developer_status: number;
   detail: any;
   deviceKeyList: string[];
-  deviceTableData: {
-    data: [];
-    total: number;
-    loading: boolean;
-    param: {
-      pageNum: number;
-      pageSize: number;
-      gatewayKey: string;
-      dateRange: string[];
-    };
-  };
+  deviceTableData: any;
   tableData: {
     data: [];
     total: number;
@@ -454,20 +412,13 @@ interface TableDataState {
       deviceType: string;
       status: string;
       dateRange: string[];
-    };
+    } | any;
   };
   logtableData: {
     data: [];
     total: number;
     loading: boolean;
-    param: {
-      pageNum: number;
-      pageSize: number;
-      name: string;
-      deviceType: string;
-      status: string;
-      dateRange: string[];
-    };
+    param: any;
   };
 }
 export default defineComponent({
@@ -494,7 +445,7 @@ export default defineComponent({
     const editAssetRef = ref();
     const dataList = ref();
     const deviceAssetData = ref();
-    const deviceAssetMetadata = ref({});
+    const deviceAssetMetadata = ref<any>({});
     const state = reactive<TableDataState>({
       certificate: [],
       phone: [],
@@ -553,9 +504,7 @@ export default defineComponent({
     });
 
     function initData() {
-
-      const ids = route.params && route.params.id;
-      api.instance.detail(ids).then((res: any) => {
+      api.instance.detail(route.params?.id).then((res: any) => {
         state.detail = res.data;
         state.developer_status = res.data.status;
         state.tableData.param.productKey = res.data.product.key;
@@ -591,7 +540,7 @@ export default defineComponent({
         api.dev_asset.detail({ deviceKey: state.detail.key }).then((resde: any) => {
           // 存储设备档案信息
           deviceAssetData.value = resde;
-          const newArray = resde.data.map(obj => {
+          const newArray = resde.data.map((obj: any) => {
             const { name, value, ...rest } = obj;
             const newObj = { name, value, ...rest };
             newObj[name] = value ? value : '';
@@ -672,7 +621,7 @@ export default defineComponent({
 
     };
 
-    const onLogDetail = (row: TableDataRow) => {
+    const onLogDetail = (row: any) => {
       state.jsonData = JSON.parse(row.content);
       state.dialogVisible = true;
     };
@@ -683,22 +632,22 @@ export default defineComponent({
 
 
     //编辑属性
-    const onEditAttr = (row: TableDataRow) => {
+    const onEditAttr = (row: any) => {
       editAttrRef.value.openDialog(row, state.productKey);
     };
 
     //编辑功能
-    const onEditFun = (row: TableDataRow) => {
+    const onEditFun = (row: any) => {
       editFunRef.value.openDialog(row, state.productKey);
     };
 
     //编辑事件
-    const onEditEvent = (row: TableDataRow) => {
+    const onEditEvent = (row: any) => {
       editEventRef.value.openDialog(row, state.productKey);
     };
 
     //编辑标签
-    const onEditTag = (row: TableDataRow) => {
+    const onEditTag = (row: any) => {
       editTabRef.value.openDialog(row, state.productKey);
     };
 
@@ -722,12 +671,12 @@ export default defineComponent({
     };
 
     //查看日志列表
-    const onOpenListDetail = (row: TableDataRow) => {
+    const onOpenListDetail = (row: any) => {
       listDicRef.value.openDialog(row, state.detail.key);
     };
 
     // 打开修改产品弹窗
-    const onOpenEditDic = (row: TableDataRow) => {
+    const onOpenEditDic = (row: any) => {
       editDicRef.value.openDialog(row);
     };
 
@@ -737,7 +686,7 @@ export default defineComponent({
     };
 
     // 删除产品
-    const onRowDel = (key, type) => {
+    const onRowDel = (key:string, type: string) => {
       let msg = `此操作将永久删除该数据,是否继续?`;
 
       if (key.length === 0) {
@@ -771,7 +720,7 @@ export default defineComponent({
           if (type == 'tab') {
             api.model.tagdel(state.productKey, key).then(() => {
               ElMessage.success('删除成功');
-              tagdel();
+              gettab();
             });
           }
         })
@@ -825,7 +774,7 @@ export default defineComponent({
       });
     };
 
-    const wuhandleClick = (tab: TabsPaneContext) => {
+    const wuhandleClick = (tab: any) => {
       state.activetab = tab.props.name;
       switch (tab.props.name) {
         case 'attr':
@@ -843,7 +792,7 @@ export default defineComponent({
       }
     };
 
-    const handleClick = (tab: TabsPaneContext, event: Event) => {
+    const handleClick = (tab: any, event: Event) => {
       if (tab.props.name == 4) {
         //获取日志
         getlog();
@@ -874,8 +823,8 @@ export default defineComponent({
         return value;
       }
     }
-    const getStatusText = (name, value) => {
-      let data = array_list.value;
+    const getStatusText = (name: any, value: string) => {
+      let data = array_list.value as any;
       for (let i = 0; i < data.length; i++) {
         const field = data[i];
         if (field.valueType.type === "object") {
@@ -883,7 +832,7 @@ export default defineComponent({
             const property = field.valueType.properties[j];
             if (property.key === name) {
               if (property.valueType.type === "enum") {
-                const element = property.valueType.elements.find((element) => element.value === value);
+                const element = property.valueType.elements.find((element: any) => element.value === value);
                 if (element) {
                   return `${property.name}: ${element.text}`;
                 } else {
@@ -896,7 +845,7 @@ export default defineComponent({
           }
         } else if (field.key === name) {
           if (field.valueType.type === "enum") {
-            const element = field.valueType.elements.find((element) => element.value === value);
+            const element = field.valueType.elements.find((element: any) => element.value === value);
             if (element) {
               return `${field.name}: ${element.text}`;
             }
@@ -918,13 +867,13 @@ export default defineComponent({
 
         var temp = new Array();
 
-        properties.forEach(function (item, index) {
+        properties.forEach(function (item: any, index: number) {
 
           let datalist = item.list || [];
           temp[index] = [];
           var temps = new Array();
 
-          datalist.forEach(function (a, b) {
+          datalist.forEach(function (a: any, b: number) {
             if (b < 15) {
               temps.push(a);
             }
@@ -933,10 +882,6 @@ export default defineComponent({
             item.value = JSON.parse(item.value);
           }
 
-
-
-
-
           temp[index]['name'] = item.name
           temp[index]['key'] = item.key
           temp[index]['type'] = item.type
@@ -982,20 +927,6 @@ export default defineComponent({
         });
       }
     };
-    const tinyAreas = () => {
-      var data = state.data;
-
-      const tinyArea = new TinyArea('container', {
-        height: 60,
-        autoFit: false,
-        data,
-        smooth: true,
-        areaStyle: {
-          fill: '#d6e3fd',
-        },
-      });
-      tinyArea.render();
-    }
     const onlineTimeoutUpdate = () => {
       if (!state.detail.onlineTimeout) return ElMessage('请先输入设备超时时间')
       api.device.updateOnlineTimeout({ id: state.detail.id, onlineTimeout: state.detail.onlineTimeout }).then(() => {
@@ -1014,7 +945,6 @@ export default defineComponent({
       getValueText,
       onlineTimeoutUpdate,
       setAttr,
-      tinyAreas,
       setAttrRef,
       editDicRef,
       editAttrRef,

+ 27 - 25
src/views/iot/device/instance/index.vue

@@ -9,9 +9,9 @@
           <el-form-item label="标识" prop="key">
             <el-input v-model="tableData.param.key" placeholder="请输入设备标识" clearable style="width: 165px" @keyup.enter.native="typeList" />
           </el-form-item>
-          <el-form-item label="所属产品" prop="productId">
-            <el-select v-model="tableData.param.productId" style="width: 140px" filterable placeholder="请选择产品">
-              <el-option v-for="item in productData" :key="item.id" :label="item.name" :value="item.id.toString()" value-key="id"> </el-option>
+          <el-form-item label="所属产品" prop="productKey">
+            <el-select v-model="tableData.param.productKey" style="width: 140px" filterable placeholder="请选择产品">
+              <el-option v-for="item in productData" :key="item.key" :label="item.name" :value="item.key" value-key="id"> </el-option>
             </el-select>
           </el-form-item>
 
@@ -151,7 +151,7 @@ interface TableDataRow {
   createBy: string;
 }
 interface TableDataState {
-  ids: string[];
+  keys: string[];
   productData: Array<TableDataRow>;
   tableData: {
     data: Array<TableDataRow>;
@@ -162,7 +162,7 @@ interface TableDataState {
       pageSize: number;
       name: string;
       key: string;
-      productId: string;
+      productKey: string;
       status: string;
       dateRange: string[];
     };
@@ -180,7 +180,7 @@ export default defineComponent({
     const queryRef = ref();
     const batchLoading = ref(false);
     const state = reactive<TableDataState>({
-      ids: [],
+      keys: [],
       productData: [],
       tableData: {
         data: [],
@@ -191,6 +191,7 @@ export default defineComponent({
           pageSize: 10,
           name: '',
           key: '',
+          productKey: '',
           status: '',
           dateRange: [],
         },
@@ -234,13 +235,13 @@ export default defineComponent({
 
     //批量启用
     const setDeviceStatus1 = (row?: TableDataRow) => {
-      let ids: string[] = [];
+      let keys: string[] = [];
       if (row) {
-        ids = [row.key];
+        keys = [row.key];
       } else {
-        ids = state.ids;
+        keys = state.keys;
       }
-      if (ids.length === 0) {
+      if (keys.length === 0) {
         ElMessage.error('请选择要操作的数据。');
         return;
       }
@@ -251,7 +252,7 @@ export default defineComponent({
       })
         .then(() => {
           batchLoading.value = true
-          api.device.setDeviceStatus({ ids: ids, status: 1 }).then(() => {
+          api.device.setDeviceStatus({ ids: keys, status: 1 }).then(() => {
             ElMessage.success('启用成功');
             typeList();
           }).finally(() => batchLoading.value = false)
@@ -261,13 +262,13 @@ export default defineComponent({
 
     //批量禁用
     const setDeviceStatus0 = (row?: TableDataRow) => {
-      let ids: string[] = [];
+      let keys: string[] = [];
       if (row) {
-        ids = [row.key];
+        keys = [row.key];
       } else {
-        ids = state.ids;
+        keys = state.keys;
       }
-      if (ids.length === 0) {
+      if (keys.length === 0) {
         ElMessage.error('请选择要操作的数据。');
         return;
       }
@@ -278,7 +279,7 @@ export default defineComponent({
       })
         .then(() => {
           batchLoading.value = true
-          api.device.setDeviceStatus({ ids: ids, status: 0 }).then(() => {
+          api.device.setDeviceStatus({ ids: keys, status: 0 }).then(() => {
             ElMessage.success('禁用成功');
             typeList();
           }).finally(() => batchLoading.value = false)
@@ -288,14 +289,14 @@ export default defineComponent({
     // 删除产品
     const onRowDel = (row?: TableDataRow) => {
       let msg = '你确定要删除所选数据?';
-      let ids: string[] = [];
+      let keys: string[] = [];
       if (row) {
         msg = `此操作将永久删除设备:“${row.name}”,是否继续?`;
-        ids = [row.key];
+        keys = [row.key];
       } else {
-        ids = state.ids;
+        keys = state.keys;
       }
-      if (ids.length === 0) {
+      if (keys.length === 0) {
         ElMessage.error('请选择要删除的数据。');
         return;
       }
@@ -305,7 +306,7 @@ export default defineComponent({
         type: 'warning',
       })
         .then(() => {
-          api.instance.del(ids).then(() => {
+          api.instance.del(keys).then(() => {
             ElMessage.success('删除成功');
             typeList();
           });
@@ -324,16 +325,17 @@ export default defineComponent({
     };
     // 多选框选中数据
     const handleSelectionChange = (selection: TableDataRow[]) => {
-      state.ids = selection.map((item) => item.key);
+      state.keys = selection.map((item) => item.key);
     };
-    const onActionStatus = (item: TableDataRow[]) => {
+
+    const onActionStatus = (item: TableDataRow) => {
       if (item.status == 0) {
-        api.instance.devdeploy({ id: item.key }).then((res: any) => {
+        api.instance.devdeploy(item.key).then((res: any) => {
           typeList();
           ElMessage.success(res.message || '操作成功');
         });
       } else {
-        api.instance.devundeploy({ id: item.key }).then((res: any) => {
+        api.instance.devundeploy(item.key).then((res: any) => {
           typeList();
           ElMessage.success(res.message || '操作成功');
         });

+ 35 - 28
src/views/iot/device/product/detail.vue

@@ -185,7 +185,7 @@
 				</dataParse>
 			</el-tab-pane>
 		</el-tabs>
-		<EditDic ref="editDicRef" @typeList="typeList" />
+		<EditDic ref="editDicRef" @typeList="productDetail" />
 		<EditAttr ref="editAttrRef" @typeList="getproperty" />
 		<EditFun ref="editFunRef" @typeList="getfunction" />
 		<EditEvent ref="editEventRef" @typeList="getevent" />
@@ -212,10 +212,12 @@ import { useRoute } from 'vue-router';
 
 import api from '/@/api/device';
 
-
 interface TableDataState {
-	ids: number[];
+	isShowDialog: boolean;
 	detail: any;
+	developer_status: number;
+	activeName: string;
+	activetab: string;
 	tableData: {
 		data: [];
 		total: number;
@@ -224,11 +226,11 @@ interface TableDataState {
 			pageNum: number;
 			pageSize: number;
 			name: string;
-			productKey: string;
+			productKey: string | string[];
 			deviceType: string;
 			status: string;
 			dateRange: string[];
-		};
+		} | any;
 	};
 }
 export default defineComponent({
@@ -259,7 +261,7 @@ export default defineComponent({
 				loading: false,
 				param: {
 					pageNum: 1,
-					productKey: route.params && route.params.id,
+					productKey: route.params?.id,
 					pageSize: 10,
 					status: '',
 					dateRange: [],
@@ -268,12 +270,7 @@ export default defineComponent({
 		});
 
 		onMounted(() => {
-			const ids = route.params && route.params.id;
-			api.product.detail(ids).then((res: any) => {
-				state.detail = res.data;
-				state.developer_status = res.data.status
-			});
-
+			productDetail()
 			//第一次加载
 			api.model.property(state.tableData.param).then((res: any) => {
 				state.tableData.data = res.Data;
@@ -281,24 +278,33 @@ export default defineComponent({
 			});
 		});
 
+		function productDetail() {
+			const productKey = route.params?.id;
+			api.product.detail(productKey).then((res: any) => {
+				state.detail = res.data;
+				state.developer_status = res.data.status
+			});
+		}
+
+
 		//编辑属性
-		const onEditAttr = (row: TableDataRow) => {
+		const onEditAttr = (row: any) => {
 			editAttrRef.value.openDialog(row, route.params.id);
 		};
 
 		//编辑功能
-		const onEditFun = (row: TableDataRow) => {
+		const onEditFun = (row: any) => {
 			editFunRef.value.openDialog(row, route.params.id);
 		}
 
 
 		//编辑事件
-		const onEditEvent = (row: TableDataRow) => {
+		const onEditEvent = (row: any) => {
 			editEventRef.value.openDialog(row, route.params.id);
 		}
 
 		//编辑标签
-		const onEditTag = (row: TableDataRow) => {
+		const onEditTag = (row: any) => {
 			editTabRef.value.openDialog(row, route.params.id);
 		}
 
@@ -322,13 +328,13 @@ export default defineComponent({
 		};
 
 		// 打开修改产品弹窗
-		const onOpenEditDic = (row: TableDataRow) => {
+		const onOpenEditDic = (row: any) => {
 			editDicRef.value.openDialog(row);
 		};
 
 
 		// 删除产品
-		const onRowDel = (key, type) => {
+		const onRowDel = (key: string, type: string) => {
 			let msg = `此操作将永久删除该数据,是否继续?`;
 
 			if (key.length === 0) {
@@ -341,26 +347,27 @@ export default defineComponent({
 				type: 'warning',
 			})
 				.then(() => {
+					const productKey = route.params?.id as string
 					if (type == 'attr') {
-						api.model.propertydel(route.params.id, key).then(() => {
+						api.model.propertydel(productKey, key).then(() => {
 							ElMessage.success('删除成功');
 							getproperty();
 						});
 					}
 					if (type == 'fun') {
-						api.model.functiondel(route.params.id, key).then(() => {
+						api.model.functiondel(productKey, key).then(() => {
 							ElMessage.success('删除成功');
 							getfunction();
 						});
 					}
 					if (type == 'event') {
-						api.model.eventdel(route.params.id, key).then(() => {
+						api.model.eventdel(productKey, key).then(() => {
 							ElMessage.success('删除成功');
 							getevent();
 						});
 					}
 					if (type == 'tab') {
-						api.model.tagdel(route.params.id, key).then(() => {
+						api.model.tagdel(productKey, key).then(() => {
 							ElMessage.success('删除成功');
 							gettab();
 						});
@@ -415,7 +422,7 @@ export default defineComponent({
 			});
 		};
 
-		const wuhandleClick = (tab: TabsPaneContext) => {
+		const wuhandleClick = (tab: any) => {
 			state.activetab = tab.props.name;
 			switch (tab.props.name) {
 				case 'attr':
@@ -433,7 +440,7 @@ export default defineComponent({
 			}
 		};
 
-		const handleClick = (tab: TabsPaneContext, event: Event) => {
+		const handleClick = (tab: any, event: Event) => {
 		};
 
 		const updateScript = (scriptInfo: string) => {
@@ -441,14 +448,13 @@ export default defineComponent({
 		};
 
 		const CkOption = () => {
-
 			if (state.developer_status == 1) {
-				api.product.undeploy({ id: route.params.id }).then((res: any) => {
+				api.product.undeploy(route.params.id).then((res: any) => {
 					ElMessage.success('操作成功');
 					state.developer_status = 0;
 				});
 			} else {
-				api.product.deploy({ id: route.params.id }).then((res: any) => {
+				api.product.deploy(route.params.id).then((res: any) => {
 					ElMessage.success('操作成功');
 					state.developer_status = 1;
 				});
@@ -473,7 +479,7 @@ export default defineComponent({
 		}
 		const updateImg = (res: any) => {
 			if (res.code === 0) {
-				getList("attr");
+				getList();
 				ElMessage.success('物模型导入成功');
 			} else {
 				ElMessage.error(res.message);
@@ -507,6 +513,7 @@ export default defineComponent({
 			wuhandleClick,
 			onOpenEditTab,
 			onOpenEditEvent,
+			productDetail,
 			onOpenEditAttr,
 			onOpenEditFun,
 			onOpenEditDic,

+ 13 - 12
src/views/iot/device/product/index.vue

@@ -36,7 +36,7 @@
             </el-icon>
             新增产品
           </el-button>
-          <el-button type="info" class="ml10" @click="onRowDel(null)" v-auth="'del'">
+          <el-button type="info" class="ml10" @click="onRowDel()" v-auth="'del'">
             <el-icon>
               <ele-Delete />
             </el-icon>
@@ -83,6 +83,7 @@ import api from '/@/api/device';
 // 定义接口来定义对象的类型
 interface TableDataRow {
   id: number;
+  key: string;
   name: string;
   deviceType: string;
   status: number;
@@ -90,7 +91,7 @@ interface TableDataRow {
   createBy: string;
 }
 interface TableDataState {
-  ids: number[];
+  keys: string[];
   tableData: {
     data: Array<TableDataRow>;
     total: number;
@@ -114,7 +115,7 @@ export default defineComponent({
     const editDicRef = ref();
     const queryRef = ref();
     const state = reactive<TableDataState>({
-      ids: [],
+      keys: [],
       tableData: {
         data: [],
         total: 0,
@@ -122,9 +123,9 @@ export default defineComponent({
         param: {
           pageNum: 1,
           pageSize: 10,
-          dictName: '',
-          dictType: '',
           status: '',
+          name: '',
+          deviceType: '',
           dateRange: [],
         },
       },
@@ -149,16 +150,16 @@ export default defineComponent({
       editDicRef.value.openDialog(row);
     };
     // 删除产品
-    const onRowDel = (row: TableDataRow) => {
+    const onRowDel = (row?: TableDataRow) => {
       let msg = '你确定要删除所选数据?';
-      let ids: number[] = [];
+      let keys: string[] = [];
       if (row) {
         msg = `此操作将永久删除产品:“${row.name}”,是否继续?`;
-        ids = [row.id];
+        keys = [row.key];
       } else {
-        ids = state.ids;
+        keys = state.keys;
       }
-      if (ids.length === 0) {
+      if (keys.length === 0) {
         ElMessage.error('请选择要删除的数据。');
         return;
       }
@@ -168,7 +169,7 @@ export default defineComponent({
         type: 'warning',
       })
         .then(() => {
-          api.product.delete(ids).then(() => {
+          api.product.delete(keys).then(() => {
             ElMessage.success('删除成功');
             typeList();
           });
@@ -187,7 +188,7 @@ export default defineComponent({
     };
     // 多选框选中数据
     const handleSelectionChange = (selection: TableDataRow[]) => {
-      state.ids = selection.map((item) => item.id);
+      state.keys = selection.map((item) => item.key);
     };
     return {
       addDicRef,