Procházet zdrojové kódy

完成场景详情,场景定义(待深度测试及bug)

yukai před 2 roky
rodič
revize
23ece6091e

+ 7 - 8
src/api/scene/index.ts

@@ -4,13 +4,12 @@ const baseUrl = getOrigin(import.meta.env.VITE_SERVER_URL);
 
 export default {
   manage: {
-    getFolder: () => get('/configure/folder/list'),
-    addFolder: (data: any) => post('/configure/folder/add', data),
-    getList: (data: any) => get('/configure/diagram/getList', data),
-    del: (id: number) => del('/configure/diagram/del', { id }),
-    deploy: (data: object) => post('/product/deploy', data),
-    undeploy: (data: object) => post('/product/undeploy', data),
-    add: (data: any) => post('/configure/diagram/add', data),
-    edit: (data: any) => post('/configure/diagram/edit', data),
+    getList: (data: any) => get('/scene/scene/list', data),
+    del: (ids: number) => del('/scene/scene/delete', { ids }),
+    status: (data: object) => post('/scene/scene/status', data),
+    add: (data: any) => post('/scene/scene/add', data),
+    edit: (data: any) => post('/scene/scene/edit', data),
+    getDetail: (data: any) => get('/scene/scene/get', data),
+    getColumns: (data: any) => post('/scene/scene/parameter_columns', data),
   }
 }

+ 4 - 2
src/views/iot/ota-update/update/detail.vue

@@ -3,7 +3,7 @@
 		<div class="content">
 			<div class="flex cont_box">
 				<div class="font26">升级包名称:{{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="detail.checkres == 1 ? 'on' : 'off'"></span>{{ detail.checkres == 1 ? '已验证' : '未验证' }}</div>
 			</div>
 			<div class="mt20"></div>
 			<div class="container">
@@ -14,6 +14,7 @@
 				<div class="item">签名算法:{{detail.are}}</div>
 				<div class="item">模块名称:{{detail.moduleName}}</div>
 			</div>
+
 			<!-- <div class="mt20"></div>
 			<div class="status_list">
 				<div class="otaflex">
@@ -90,7 +91,8 @@ export default defineComponent({
 				'name':'',
 				'typo':1,
 				'are':'',
-				'moduleName':''
+				'moduleName':'',
+				'checkres':0,
 			},
 			
 		})

+ 2 - 2
src/views/iot/ota-update/update/index.vue

@@ -39,9 +39,9 @@
 			</el-table-column>
 			<el-table-column prop="productName" label="所属产品" show-overflow-tooltip></el-table-column>
 			<el-table-column prop="moduleName" label="模块名称" show-overflow-tooltip></el-table-column>
-			<el-table-column prop="name" label="状态" width="100" align="center">
+			<el-table-column prop="checkres" label="状态" width="100" align="center">
 				<template #default="scope">
-					<el-tag type="success" size="small" v-if="scope.row.status">验证</el-tag>
+					<el-tag type="success" size="small" v-if="scope.row.checkres==1">验证</el-tag>
 					<el-tag type="info" size="small" v-else>未验证</el-tag>
 				</template>
 			</el-table-column> 

+ 48 - 41
src/views/iot/scene/manage/component/condition.vue

@@ -1,22 +1,23 @@
 <template>
-  <div >
-    <div v-for="(item, index) in condition" :key="index" >
-    
+  <div>
+    <div v-for="(item, index) in condition" :key="index">
+
       <div v-if="index > 0"><el-divider>或满足以下条件</el-divider></div>
       <div class="type-item">
-        <div class="conicon" style="width: 100%; text-align: right; position: relative; right: -15px; top: -5px; color: red"
-        v-if="index > 0">
-        <el-icon @click="delScene(index)" >
-          <CircleClose />
-        </el-icon>
-      </div>
+        <div class="conicon"
+          style="width: 100%; text-align: right; position: relative; right: -15px; top: -5px; color: red"
+          v-if="index > 0">
+          <el-icon @click="delScene(index)">
+            <CircleClose />
+          </el-icon>
+        </div>
         <!-- <el-icon size="26" @click="delScene(index)" v-if="index > 0"
           style="position: relative;font-size: 26px;    top: 18px;left: -14px;">
           <CircleClose />
         </el-icon> -->
         <div class="flex-warp item_list">
-         
-          <div v-for="(vo, i) in item.list" :key="i">
+
+          <div v-for="(vo, i) in item" :key="i">
 
             <div class="items">
               <el-button
@@ -25,12 +26,13 @@
 
               <el-popover placement="bottom" trigger="click">
                 <template #reference>
-                  <el-button style="background: #9adbff4d; color: #00a4fe;border: 1px solid #00a4fe4d;">{{ vo.param ||
+                  <el-button style="background: #9adbff4d; color: #00a4fe;border: 1px solid #00a4fe4d;">{{ vo.parameter_text ||
                     '请选择参数' }}</el-button>
                 </template>
                 <div class="popover-content">
                   <ul>
-                    <li v-for="option in options" :key="option.value" @click="vo.param = option.value;">{{ option.label }}
+                    <li v-for="(option, d) in columnList" :key="d"  @click="setParameter(vo,option)">
+                    {{option.name }}
                     </li>
                   </ul>
                 </div>
@@ -38,12 +40,12 @@
 
               <el-popover placement="bottom" trigger="click">
                 <template #reference>
-                  <el-button style="background: #a3caff4d; color: #2f54eb;border: 1px solid #2f54eb4d;">{{ vo.operator ||
+                  <el-button style="background: #a3caff4d; color: #2f54eb;border: 1px solid #2f54eb4d;">{{ vo.operator_text ||
                     '操作符' }}</el-button>
                 </template>
                 <div class="popover-content">
                   <ul>
-                    <li v-for="option in options" :key="option.value" @click="vo.operator = option.value;">{{ option.label
+                    <li v-for="option in operatorList" :key="option.Key" @click="vo.operator = option.Key;vo.operator_text = option.Name;">{{ option.Name
                     }}</li>
                   </ul>
                 </div>
@@ -55,10 +57,8 @@
                     '参数值' }}</el-button>
                 </template>
                 <div class="popover-content">
-                  <ul>
-                    <li v-for="option in options" :key="option.value" @click="vo.value = option.value;">{{ option.label }}
-                    </li>
-                  </ul>
+                   <el-input v-model="vo.value" placeholder="请输入参数值" />
+
                 </div>
               </el-popover>
 
@@ -72,10 +72,10 @@
 
           <div style="    padding-top: 12px;" @click="addSceneItem(index)">
             <el-icon size="18" style="    font-size: 24px;">
-              <CirclePlus size="18"/>
+              <CirclePlus size="18" />
             </el-icon>
           </div>
-        
+
         </div>
 
       </div>
@@ -96,26 +96,30 @@
 import { PropType, ref } from 'vue'
 import { CirclePlus, CircleClose, Right } from '@element-plus/icons-vue';
 
-const options = [
-  { label: '选项一', value: 'option1' },
-  { label: '选项二', value: 'option2' },
-  { label: '选项三', value: 'option3' },
-];
+const operatorList=ref([{
+  'Key':'',
+  'Name':'',
+}]);
 
 interface IConditionItem {
-  param?: string;
+  [x: string]: any;
+  parameter?: string;
   operator?: string;
   value?: string;
 }
 
 interface IValueType {
-  list: IConditionItem[] ;
+  list: IConditionItem[];
 }
 
 const props = defineProps({
 
   condition: {
-    type: Array as PropType<IValueType[]> | undefined,
+    type: Array as PropType<IConditionItem[]> | undefined,
+    default: () => []
+  },
+  columnList: {
+    type: Array,
     default: () => []
   },
   operate_index: {
@@ -124,28 +128,32 @@ const props = defineProps({
   }
 })
 
+const setParameter=(vo: IConditionItem,item:any)=>{
+  vo.parameter_text = item.name;
+  vo.parameter = item.column;
+  operatorList.value=item.termTypes
+
+}
+
 const addSceneItem = (index: any | number) => {
-  props.condition[index].list.push({
-    'param': '',
+  props.condition[index].push({
+    'parameter': '',
     'operator': '',
     'value': ''
   })
 }
 
 const DelSceneItem = (index: any | number) => {
-  props.condition[index].list.splice(index, 1);
+  props.condition[index].splice(index, 1);
 }
 
 
 const addScene = () => {
-  props.condition.push({
-    'list': [{
-      'param': '',
-      'operator': '',
-      'value': ''
-    }],
-
-  });
+  props.condition.push([{
+    'parameter': '',
+    'operator': '',
+    'value': ''
+  }]);
 };
 const delScene = (index: number) => {
   props.condition.splice(index, 1);
@@ -209,7 +217,6 @@ const delScene = (index: number) => {
 
   .item_list {
     // background: #fff;
-    border: 1px dashed #959596;
 
     .items {
       padding: 10px;

+ 108 - 85
src/views/iot/scene/manage/component/sceneItem.vue

@@ -12,55 +12,49 @@
       </div>
       <div class="product flex flex-warp">
 
-        <el-form-item label="产品:" prop="product_key">
-          <el-select v-model="item.product_key" filterable placeholder="请选择产品">
+        <el-form-item label="产品:" prop="productKey">
+          <el-select v-model="item.productKey" filterable placeholder="请选择产品" @change="seletChange(index,item.productKey!)">
             <el-option v-for="it in sourceData" :key="it.key" :label="it.name" :value="it.key">
               <span style="float: left">{{ it.name }}</span>
               <span style="float: right; font-size: 13px">{{ it.key }}</span>
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="设备:" prop="device_key">
-          <el-select v-model="item.device_key" filterable placeholder="请选择设备">
+        <el-form-item label="设备:" prop="deviceKey">
+          <el-select v-model="item.deviceKey" filterable placeholder="请选择设备">
             <el-option v-for="it in deviceListData" :key="it.key" :label="it.name" :value="it.key">
               <span style="float: left">{{ it.name }}</span>
               <span style="float: right; font-size: 13px">{{ it.key }}</span>
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="触发类型:" prop="type">
-          <el-select v-model="item.type" filterable placeholder="请选择触发类型">
+        <el-form-item label="触发类型:" prop="triggerType">
+          <el-select v-model="item.triggerType" filterable placeholder="请选择触发类型" @change="getcolumns(index,item.triggerType!)">
             <el-option v-for="it in sourceTypeData" :key="it.key" :label="it.name" :value="it.key">
               <span style="float: left">{{ it.name }}</span>
               <span style="float: right; font-size: 13px">{{ it.key }}</span>
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="定时请求">
+        <el-form-item label="定时请求" v-if="item.triggerType && ['readAttribute', 'functionCall'].includes(item.triggerType)">
           <div style="display:flex">
-            <el-input v-model="item.cronExpression" placeholder="请输入cron表达式" />
+            <el-input v-model="item.timer" placeholder="请输入cron表达式" />
             <el-dialog v-model="dialogVisible" title="选择Cron规则" width="60%">
               <vue3cron @handlelisten="handlelisten" :type="index" @close="cronclose"></vue3cron>
             </el-dialog>
-            <el-button type="success"  @click="showCron()" style="margin-left: 5px;">设置</el-button>
+            <el-button type="success" @click="showCron()" style="margin-left: 5px;">设置</el-button>
 
           </div>
         </el-form-item>
-        <el-form-item label="属性:" prop="type">
-          <el-select v-model="item.type" filterable placeholder="请选择触发类型">
-            <el-option v-for="it in sourceData" :key="it.key" :label="it.name" :value="it.key">
-              <span style="float: left">{{ it.name }}</span>
-              <span style="float: right; font-size: 13px">{{ it.key }}</span>
-            </el-option>
-          </el-select>
-        </el-form-item>
+
       </div>
 
       <div class="title flex">
-        <div class="icon"></div> 触发条件 <div class="ml10"> <el-switch v-model="item.where" />
+        <div class="icon"></div> 触发条件 <div class="ml10"> <el-switch v-model="item.triggerSwitch" />
         </div>
       </div>
-        <Condition :condition="item.condition" :operate_index="index"  v-if="item.where"></Condition>
+      <Condition :condition="item.condition" :operate_index="index" :columnList="columnList" v-if="item.triggerSwitch">
+      </Condition>
     </div>
     <div>
       <div class="edit">
@@ -76,34 +70,39 @@
 </template>
 
 <script lang="ts" setup>
-import { PropType, ref,unref  } from 'vue'
+import { PropType, ref, unref, reactive, getCurrentInstance } from 'vue'
 import { DocumentAdd, CircleClose, Right } from '@element-plus/icons-vue';
 import vue3cron from '/@/components/vue3cron/vue3cron.vue';
-
+import api from '/@/api/scene';
+import product from '/@/api/device';
 import Condition from './condition.vue';
+const { proxy } = getCurrentInstance() as any;
+const scene_type = proxy.useDict('scene_type');
 
-const dialogVisible=ref();
+const dialogVisible = ref();
+const sourceData = ref<testIValueType[]>([]);
 
+const deviceListData = ref<testIValueType[]>([]);
+const columnList = ref([]);
+let product_key = "";
 interface IConditionItem {
-  param?: string;
+  parameter?: string;
   operator?: string;
   value?: string;
 }
 
 interface IValueType {
-  type?: string;
-  product_key?: string;
-  device_key?: string;
-  where?: string;
-  cronExpression?: string;
-  condition?: {
-    list?: IConditionItem[] ;
-  }[];
+  triggerType?: string;
+  productKey?: string;
+  deviceKey?: string;
+  triggerSwitch?: boolean;
+  timer?: string;
+  condition?: IConditionItem[][]; // 更新这里的类型定义
 }
 
 
-
 interface testIValueType {
+  id: string;
   key: string;
   name?: string;
 
@@ -113,46 +112,15 @@ const props = defineProps({
 
   sceneList: {
     type: Array as PropType<IValueType[]>,
-    default: () => []
-  },
-  sourceData: {
-    type: Array as PropType<testIValueType[]>,
-    default: () => [{
-      'key': 'test',
-      'name': '测试',
-    }, {
-      'key': 'test',
-      'name': '测试',
-    }, {
-      'key': 'test',
-      'name': '测试',
-    }, {
-      'key': 'test',
-      'name': '测试',
-    }, {
-      'key': 'test',
-      'name': '测试',
-    }]
+    default: () => [],
   },
-  deviceListData: {
-    type: Array as PropType<testIValueType[]>,
-    default: () => [{
-      'key': 'all',
-      'name': '全部设备',
-    }, {
-      'key': '3242342424',
-      'name': 'A21楼智能电表',
-    }, {
-      'key': '453423424',
-      'name': '五楼温湿度传感设备',
-    }, {
-      'key': '4534323311',
-      'name': '1楼震动传感设备',
-    }, {
-      'key': 'aworr324242',
-      'name': '2号院充电桩',
-    }]
+
+  sceneType: {
+    type: String,
+    default: () => '',
   },
+
+
   sourceTypeData: {
     type: Array as PropType<testIValueType[]>,
     default: () => [{
@@ -179,22 +147,75 @@ const props = defineProps({
     }]
   }
 })
+const getProductList = () => {
+  product.product.getSubList().then((res: any) => {
+    sourceData.value = res.product;
+  });
+};
+getProductList();
+const seletChange = (index: number, val: string) => {
+
+  product_key = val;
+
+  //根据产品key获取产品ID
+  let info = unref(sourceData)?.find((pro: { key: any; }) => pro.key === val);
+  if (info) {
+    // 重置 deviceKey 的值
+    props.sceneList[index].deviceKey = '';
+    // 重置当前项的 condition 值
+    props.sceneList[index].condition = [[{
+      'parameter': '',
+      'operator': '',
+      'value': ''
+    }]];
+    getDeviceList(info.id)
+  }
 
-
+}
+const getDeviceList = (_id: any) => {
+  product.device.allList({ productId: _id }).then((res: any) => {
+    deviceListData.value = res.device
+  })
+}
+const getcolumns = (index: number, val: string)  => {
+  let where = {
+    "sceneType": props.sceneType, //场景类型
+    "typeName": scene_type[props.sceneType],
+    "device": {
+      "operation": {
+        "operator": val
+      },
+      "productKey": product_key,
+      "selector": "all"
+    }
+  }
+  getcolumnsList(where);
+ // 重置当前项的 condition 值
+ props.sceneList[index].condition = [[{
+      'parameter': '',
+      'operator': '',
+      'value': ''
+    }]];
+}
+const getcolumnsList = (where: any) => {
+  api.manage.getColumns(where).then((res: any) => {
+    columnList.value = res;
+  })
+}
 const addScene = () => {
   props.sceneList.push({
-    'product_key': '',
-    'device_key': '',
-    'type': '',
-    'condition':[{
-								'list': [{
-											'param': '',
-											'operator': '',
-											'value': ''
-										}]
-							}]
+    'productKey': '',
+    'deviceKey': '',
+    'triggerType': '',
+    'timer': '',
+    'triggerSwitch': false,
+    'condition': [[{
+      'parameter': '',
+      'operator': '',
+      'value': ''
+
+    }]]
   });
-  console.log(props.sceneList);
 };
 const delScene = (index: number) => {
   props.sceneList.splice(index, 1);
@@ -203,7 +224,7 @@ const setNull = (row: any, key: string, val: string) => {
   if (!val) row[key] = null
 }
 const handlelisten = (e: any) => {
-  props.sceneList[e.type].cronExpression=e.cron;
+  props.sceneList[e.type].timer = e.cron;
 
 };
 const showCron = () => {
@@ -215,7 +236,6 @@ const cronclose = () => {
 }
 </script>
 <style scoped lang="scss">
-
 .type-item {
   margin-top: 15px;
 
@@ -242,8 +262,11 @@ const cronclose = () => {
 
   .biankang {
 
-    border: 1px dashed #959596;;
+    border: 1px solid #e8e2e2;
+    ;
     border-radius: 10px;
+    padding: 10px;
+    margin-top: 10px;
   }
 
 

+ 35 - 29
src/views/iot/scene/manage/detail.vue

@@ -2,14 +2,14 @@
 	<el-card class="system-dic-container" style="position: relative;">
 		<div class="content">
 			<div class="flex cont_box">
-				<div class="font26">场景名称:店里车间场景</div>
-				<div class="pro-status"><span :class="developer_status == 2 ? 'on' : 'off'"></span>{{ developer_status == 2
-					? '启用' : '用' }}</div>
+				<div class="font26">场景名称:{{detail.name}}</div>
+				<div class="pro-status"><span :class="detail.status == 1 ? 'on' : 'off'"></span>{{ detail.status  == 1
+					? '启用' : '未启用' }}</div>
 			</div>
 
 			<div class="flex">
-				<div class="desc">场景描述:这个组队电力车间整个场景进行模拟计算</div>
-				<div class="edit" @click="addOrEdit({})"><el-link type="primary"> <el-icon>
+				<div class="desc">场景描述:{{detail.description}}</div>
+				<div class="edit" @click="addOrEdit(detail)"><el-link type="primary"> <el-icon>
 							<EditPen color="#409eff" />
 						</el-icon>修改</el-link></div>
 			</div>
@@ -19,7 +19,7 @@
 	</el-card>
 	<el-card style="  margin-top: 15px;" >
 		<div class="font20">场景定义</div>
-		<SceneItem :sceneList="sceneList"></SceneItem>
+		<SceneItem :sceneList="sceneList" :sceneType="detail.sceneType"></SceneItem>
 	</el-card>
 	<el-card style="  margin-top: 15px;" >
 		<div class="font20">场景动作</div>
@@ -37,21 +37,23 @@ import { EditPen, DocumentAdd } from '@element-plus/icons-vue';
 import ActionItem from './component/actionItem.vue';
 import SceneItem from './component/sceneItem.vue';
 import EditForm from './edit.vue';
-import api from '/@/api/network';
+import api from '/@/api/scene';
+import product from '/@/api/device';
 
 const editFormRef = ref();
 const sceneList = [{
-	'product_key': '',
-	'device_key': '',
-	'type': '',
-	'where': false,
-	'condition': [{
-		'list': [{
-			'param': '',
-			'operator': '',
-			'value': ''
-		}]
-	}]
+	'productKey': '',
+				'deviceKey': '',
+				'triggerType': '',
+				'timer': '',
+				'triggerSwitch': false,
+				'condition': [[{
+
+						'parameter': '',
+						'operator': '',
+						'value': ''
+
+				}]]
 }];
 
 
@@ -63,6 +65,7 @@ export default defineComponent({
 		const state = reactive({
 			developer_status: 2,
 			detail: {},
+			sourceData:[],
 			actionList: [{
 				'seriallist':[{
 
@@ -72,30 +75,33 @@ export default defineComponent({
 				}]
 			}],
 			sceneList: [{
-				'product_key': '',
-				'device_key': '',
-				'type': '',
-				'where': false,
-				'condition': [{
-					'list': [{
-						'param': '',
+				'productKey': '',
+				'deviceKey': '',
+				'triggerType': '',
+				'timer': '',
+				'triggerSwitch': false,
+				'condition': [[{
+
+						'parameter': '',
 						'operator': '',
 						'value': ''
-					}]
-				}]
+
+				}]]
 			}],
 
 		});
 		const activeName = ref('first')
 		const getDetail = () => {
 			const id = route.params && route.params.id;
-			api.server.getDetail({ "id": id }).then((res: any) => {
+			api.manage.getDetail({ "id": id }).then((res: any) => {
 				state.detail = res
 			})
 		};
 		const addOrEdit = async (row?: any) => {
 			editFormRef.value.open(row);
 		};
+		
+
 
 		const freshData = () => {
 			getDetail()
@@ -105,7 +111,7 @@ export default defineComponent({
 			router.push(`/iotmanager/network/server/edit/${route.params && route.params.id}`)
 		};
 		onMounted(() => {
-			// getDetail()
+			getDetail();
 		});
 		const handleClick = (tab: TabsPaneContext, event: Event) => {
 			// console.log(tab, event)

+ 8 - 8
src/views/iot/scene/manage/edit.vue

@@ -13,13 +13,13 @@
 			</el-form-item>
       <el-form-item label="触发方式" prop="sceneType">
         <el-radio-group v-model="formData.sceneType">
-          <el-radio label="1" value="device">设备触发</el-radio>
-          <el-radio label="2" value="manual">手动触发</el-radio>
-          <el-radio label="3" value="timer">定时触发</el-radio>
+          <el-radio label="device" >设备触发</el-radio>
+          <el-radio label="manual" >手动触发</el-radio>
+          <el-radio label="timer" >定时触发</el-radio>
         </el-radio-group>
       </el-form-item>
-			<el-form-item label="场景描述" prop="desc">
-				<el-input v-model="formData.desc" type="textarea" :rows="3" />
+			<el-form-item label="场景描述" prop="description">
+				<el-input v-model="formData.description" type="textarea" :rows="3" />
 			</el-form-item>
 		</el-form>
 		<template #footer>
@@ -32,7 +32,7 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, reactive, nextTick } from 'vue';
+import { ref, reactive, nextTick} from 'vue';
 import api from '/@/api/scene';
 import { ruleRequired } from '/@/utils/validator';
 import { ElMessage } from 'element-plus';
@@ -45,8 +45,8 @@ const formRef = ref();
 const baseForm = {
 	id: undefined,
 	name: '',
-  sceneType:"device",
-	desc: '',
+	sceneType:"device",
+	description: '',
 };
 
 const formData = reactive({

+ 32 - 22
src/views/iot/scene/manage/index.vue

@@ -34,24 +34,34 @@
 			</el-form>
 		</div>
 		<el-table :data="tableData" style="width: 100%" row-key="id" v-loading="loading">
-			<el-table-column prop="id" label="ID" width="60" show-overflow-tooltip></el-table-column>
-			<el-table-column prop="name" label="场景名称" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="name" label="类型" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="name" label="描述" show-overflow-tooltip></el-table-column>
-			<el-table-column prop="name" label="运行状态" width="100" align="center">
+			<el-table-column prop="id" label="ID"  min-width="100" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="name" label="场景名称"  show-overflow-tooltip></el-table-column>
+			<el-table-column prop="sceneType" label="场景类型" align="center">
 				<template #default="scope">
-					<el-tag type="success" size="small" v-if="scope.row.status">启用</el-tag>
-					<el-tag type="info" size="small" v-else>禁用</el-tag>
+					<el-tag size="small" v-if="scope.row.sceneType == 'device'">设备触发</el-tag>
+					<el-tag size="small" v-if="scope.row.sceneType == 'manual'">手动触发</el-tag>
+					<el-tag size="small" v-if="scope.row.sceneType == 'timer'">定时触发</el-tag>
 				</template>
 			</el-table-column>
-			<el-table-column prop="createdAt" label="创建时间" min-width="100" align="center"></el-table-column>
+
+			<el-table-column prop="status" label="状态" align="center">
+				<template #default="scope">
+					<el-tag size="small" type="success" v-if="scope.row.status == 1">启用</el-tag>
+					<el-tag size="small" type="info" v-if="scope.row.status == 0">未启用</el-tag>
+				</template>
+			</el-table-column>
+			<el-table-column prop="description" label="描述" show-overflow-tooltip></el-table-column>
+	
+			<el-table-column prop="createdAt" label="创建时间" align="center"></el-table-column>
 			<el-table-column label="操作" width="200" align="center">
 				<template #default="scope">
 					<el-button size="small" text type="primary" v-if="!scope.row.folderName"
 						@click="toDetail(scope.row.id)">详情</el-button>
 					<el-button size="small" text type="warning" v-auth="'edit'" @click="addOrEdit(scope.row)">编辑</el-button>
-					<el-button size="small" text type="success" @click="onActionStatus(scope.row)" v-if="scope.row.status==0" v-auth="'startOrStop'">启用</el-button>
-          		   <el-button size="small" text type="primary" @click="onActionStatus(scope.row)" v-if="scope.row.status>0" v-auth="'startOrStop'">停用</el-button>
+					<el-button size="small" text type="success" @click="onActionStatus(scope.row)"
+						v-if="scope.row.status == 0" v-auth="'startOrStop'">启用</el-button>
+					<el-button size="small" text type="primary" @click="onActionStatus(scope.row)" v-if="scope.row.status > 0"
+						v-auth="'startOrStop'">停用</el-button>
 					<el-button size="small" text type="info" v-auth="'del'" @click="del(scope.row)">删除</el-button>
 				</template>
 			</el-table-column>
@@ -76,7 +86,7 @@ const router = useRouter();
 
 const editFormRef = ref();
 
-const { params, tableData, getList, loading } = useSearch<any[]>(api.manage.getList, 'data', { keyWord: '' });
+const { params, tableData, getList, loading } = useSearch<any[]>(api.manage.getList, 'Data', { keyWord: '' });
 
 getList();
 /** 重置按钮操作 */
@@ -86,7 +96,7 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 	getList();
 };
 const toDetail = (id: number) => {
-      router.push(`/iotmanager/scene/manage/detail/${id}`)
+	router.push(`/iotmanager/scene/manage/detail/${id}`)
 };
 function getTokenUrl(url: string) {
 	const tokenUrl = import.meta.env.VITE_TOPO_URL
@@ -114,18 +124,18 @@ const edit = (row: any) => {
 	window.open(url);
 };
 const onActionStatus = (item: any) => {
-      if (item.status == 0) {
-        api.manage.deploy({ id: item.id }).then((res: any) => {
+	if (item.status == 0) {
+		api.manage.status({ id: item.id,status:1 }).then((res: any) => {
 			getList();
-          ElMessage.success(res.message || '操作成功');
-        });
-      } else {
-        api.manage.undeploy({ id: item.id }).then((res: any) => {
+			ElMessage.success(res.message || '操作成功');
+		});
+	} else {
+		api.manage.status({ id: item.id,status:0 }).then((res: any) => {
 			getList();
-          ElMessage.success(res.message || '操作成功');
-        });
-      }
-    }
+			ElMessage.success(res.message || '操作成功');
+		});
+	}
+}
 const del = (row: any) => {
 	ElMessageBox.confirm(`此操作将删除图形:“${row.name}”,是否继续?`, '提示', {
 		confirmButtonText: '确认',