Browse Source

Merge branch 'master' into professional2

yanglzh 1 year ago
parent
commit
1beffc03c7

+ 1 - 1
.vscode/settings.json

@@ -131,7 +131,7 @@
   },
   "editor.wordWrapColumn": 200,
   "[scss]": {
-    "editor.defaultFormatter": "MikeBovenlander.formate"
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
   },
   "npm.exclude": "**/{dist_electron,vendor}",
   "files.exclude": {

+ 3 - 0
index.html

@@ -7,6 +7,9 @@
 	<meta http-equiv="Expires" content="0" />
 	<meta http-equiv="pragram" content="no-cache">
 	<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
+	<meta name="keywords" content="sagoo,sagooiot,iot,沙果,沙果物联,沙果云科技">
+	<meta name="description" content="SagooIOT开源物联网系统旨在提供高性能、低成本、易用的企业级物联网系统。SagooIOT提供了支持私有化或容器化形式的部署,用户可以将其轻松部署在单机、集群或容器服务环境中,并且支持横向扩展,以满足不同规模的业务需求。使用SagooIOT能够获得出色的性能表现,提供优异的IOT服务能力。">
+	<meta name="author" content="Liaoning Sagoo Cloud Technology Co., Ltd">
 
 	<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" />
 	<link rel="icon" href="/favicon.ico" />

+ 1 - 1
src/theme/dark.scss

@@ -14,7 +14,7 @@
 	--next-text-color-regular    : #9b9da1;
 	--next-text-color-placeholder: #7a7a7a;
 	--next-color-hover           : #3c3c3c;
-	--next-color-hover-rgba      : #000000;
+	--next-color-hover-rgba      : #17181B;
 
 
 	// root

File diff suppressed because it is too large
+ 182 - 161
src/theme/fast.scss


+ 39 - 39
src/views/iot/device/category/component/edit.vue

@@ -1,9 +1,9 @@
 <template>
 	<div class="system-edit-dept-container">
-		<el-dialog :title="(ruleForm.id ? '修改' : '添加') + '分类'" v-model="isShowDialog" width="769px">
+		<el-dialog :title="(ruleForm.id ? '修改' : '添加') + '分类'" v-model="isShowDialog" width="600px">
 			<el-form ref="formRef" :model="ruleForm" :rules="rules" label-width="90px">
 				<el-row :gutter="35">
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="上级分类">
 							<el-cascader :options="deptData" :props="{ checkStrictly: true, emitPath: false, value: 'id', label: 'name' }" placeholder="请选择分类" clearable class="w100" v-model="ruleForm.parentId">
 								<template #default="{ node, data }">
@@ -13,22 +13,22 @@
 							</el-cascader>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-col :xs="24" :sm="12" :md="16" :lg="16" :xl="16">
 						<el-form-item label="分类名称" prop="name">
 							<el-input v-model="ruleForm.name" placeholder="请输入分类名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="排序" prop="sort">
+					<el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="8">
+						<el-form-item label="排序" prop="sort" label-width="40px">
 							<el-input-number v-model="ruleForm.sort" :min="0" controls-position="right" placeholder="请输入排序" class="w100" />
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="分类标识" prop="key">
 							<el-input v-model="ruleForm.key" placeholder="请输入分类名称" clearable></el-input>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
 						<el-form-item label="描述" prop="desc">
 							<el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入描述" maxlength="150"></el-input>
 						</el-form-item>
@@ -38,7 +38,7 @@
 			<template #footer>
 				<span class="dialog-footer">
 					<el-button @click="onCancel">取 消</el-button>
-					<el-button type="primary" @click="onSubmit"  :loading="loading">{{ ruleForm.id ? '修 改' : '添 加' }}</el-button>
+					<el-button type="primary" @click="onSubmit" :loading="loading">{{ ruleForm.id ? '修 改' : '添 加' }}</el-button>
 				</span>
 			</template>
 		</el-dialog>
@@ -79,7 +79,7 @@ export default defineComponent({
 	name: 'deviceEditCate',
 	setup(prop, { emit }) {
 		const formRef = ref<HTMLElement | null>(null);
-	    const loading = ref(false); // 添加loading状态
+		const loading = ref(false); // 添加loading状态
 		const state = reactive<DeptSate>({
 			isShowDialog: false,
 			ruleForm: {
@@ -122,40 +122,40 @@ export default defineComponent({
 			if (!formWrap) return;
 			formWrap.validate(async (valid: boolean) => {
 				if (valid) {
-				// 禁用按钮
-				loading.value = true;
-				if (!state.ruleForm.parentId) {
-					state.ruleForm.parentId = 0;
-				}
-				if (!state.ruleForm.id) {
-					//添加
-					try {
-					// 等待提交完成
-					await api.category.add(state.ruleForm);
-					ElMessage.success('分类添加成功');
-					closeDialog(); // 关闭弹窗
-					emit('getCateList');
-					} catch (error) {
-					ElMessage.error('分类添加失败');
+					// 禁用按钮
+					loading.value = true;
+					if (!state.ruleForm.parentId) {
+						state.ruleForm.parentId = 0;
 					}
+					if (!state.ruleForm.id) {
+						//添加
+						try {
+							// 等待提交完成
+							await api.category.add(state.ruleForm);
+							ElMessage.success('分类添加成功');
+							closeDialog(); // 关闭弹窗
+							emit('getCateList');
+						} catch (error) {
+							ElMessage.error('分类添加失败');
+						}
+					} else {
+						//修改
+						try {
+							// 等待提交完成
+							await api.category.edit(state.ruleForm);
+							ElMessage.success('分类修改成功');
+							closeDialog(); // 关闭弹窗
+							emit('getCateList');
+						} catch (error) { }
+					}
+					// 启用按钮
+					loading.value = false;
 				} else {
-					//修改
-					try {
-					// 等待提交完成
-					await api.category.edit(state.ruleForm);
-					ElMessage.success('分类修改成功');
-					closeDialog(); // 关闭弹窗
-					emit('getCateList');
-					} catch (error) {}
-				}
-				// 启用按钮
-				loading.value = false;
-				} else {
-				// 表单验证失败时,启用按钮
-				loading.value = false;
+					// 表单验证失败时,启用按钮
+					loading.value = false;
 				}
 			});
-			};
+		};
 		const resetForm = () => {
 			state.ruleForm = {
 				...baseForm,

+ 2 - 5
src/views/iot/device/instance/component/subDevice.vue

@@ -169,7 +169,7 @@
 									<div class="wu-title">
 										<div class="title">事件定义</div>
 										<div>
-											<el-button type="primary" @click="onOpenEditEvent()">添加</el-button>
+											<el-button size="small" type="primary" @click="onOpenEditEvent()">添加</el-button>
 										</div>
 									</div>
 
@@ -756,17 +756,14 @@ export default defineComponent({
 	},
 })
 </script>
-  <style>
+  <style scoped>
 .content {
-	background: #fff;
 	width: 100%;
 	padding: 20px;
 }
 .content-box {
-	background: #fff;
 	width: 100%;
 	padding: 20px;
-	margin-top: 20px;
 }
 .cont_box {
 	display: flex;

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

@@ -1,11 +1,10 @@
 <template>
-  <div class="system-dic-container">
+  <div class="page">
     <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-option" @click="CkOption">{{ developer_status == 2 ? '下线' : '上线' }}</div> -->
       </div>
     </div>
@@ -52,20 +51,19 @@
 
                 <div class="statusname" v-if="item.type != 'object'">
 
-                  {{getValueText(item.key,item.value)}}
+                  {{ getValueText(item.key, item.value) }}
                   <!-- {{ item.value }}{{ item.unit }} -->
 
                 </div>
                 <div v-else>
                   <div class="oblist" v-for="(vare, name) in item.value">
-                    <div> {{getStatusText(name,vare)}}</div>
+                    <div> {{ getStatusText(name, vare) }}</div>
                     <!-- <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>
@@ -75,52 +73,26 @@
           <div class="pro-box">
             <div class="protitle">设备信息</div>
             <div>
-              <el-button type="primary" v-auth="'edit'" @click="onOpenEditDic(detail)">编辑</el-button>
+              <el-button size="small" type="primary" v-auth="'edit'" @click="onOpenEditDic(detail)">编辑</el-button>
             </div>
           </div>
 
-          <div class="ant-descriptions-view">
-            <table>
-              <tbody>
-                <tr class="ant-descriptions-row">
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">设备标识</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ detail.key }}</td>
-                  <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">
-                    <router-link :to="'/iotmanager/device/product/detail/' + prodetail.id" class="link-type">{{
-                      detail.productName }} </router-link>
-                  </td>
-
-                </tr>
-                <tr class="ant-descriptions-row">
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">消息协议</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ prodetail.messageProtocol }}</td>
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">链接协议</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ prodetail.transportProtocol }}</td>
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">设备类型</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ prodetail.deviceType }}</td>
-                </tr>
-                <tr class="ant-descriptions-row">
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">固件版本</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ detail.version }}</td>
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">注册时间</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ detail.updatedAt }}</td>
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">最后上线时间</th>
-                  <td class="ant-descriptions-item-content" colspan="1">{{ detail.lastOnlineTime || '' }}</td>
-                </tr>
-                <tr class="ant-descriptions-row">
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">详细地址</th>
-                  <td class="ant-descriptions-item-content" colspan="5">{{ detail.address }}</td>
-                </tr>
-                <tr class="ant-descriptions-row">
-                  <th class="ant-descriptions-item-label ant-descriptions-item-colon">说明</th>
-                  <td class="ant-descriptions-item-content" colspan="5">{{ detail.desc }}</td>
-                </tr>
-              </tbody>
-            </table>
-          </div>
+          <el-descriptions class="margin-top" :column="3" border>
+            <el-descriptions-item label="设备标识">{{ detail.key }}</el-descriptions-item>
+            <el-descriptions-item label="设备名称">{{ detail.name }}</el-descriptions-item>
+            <el-descriptions-item label="所属产品">
+              <router-link :to="'/iotmanager/device/product/detail/' + prodetail.id" class="link-type">{{
+                detail.productName }} </router-link>
+            </el-descriptions-item>
+            <el-descriptions-item label="消息协议">{{ prodetail.messageProtocol }}</el-descriptions-item>
+            <el-descriptions-item label="链接协议">{{ prodetail.transportProtocol }}</el-descriptions-item>
+            <el-descriptions-item label="设备类型">{{ prodetail.deviceType }}</el-descriptions-item>
+            <el-descriptions-item label="固件版本">{{ detail.version }}</el-descriptions-item>
+            <el-descriptions-item label="注册时间">{{ detail.updatedAt }}</el-descriptions-item>
+            <el-descriptions-item label="最后上线时间">{{ detail.lastOnlineTime || '' }}</el-descriptions-item>
+            <el-descriptions-item label="详细地址">{{ detail.address }}</el-descriptions-item>
+            <el-descriptions-item label="说明">{{ detail.desc }}</el-descriptions-item>
+          </el-descriptions>
           <div class="flex" style="margin-top: 20px;">
             <el-input type="number" style="width: 380px;margin-right: 20px;" v-model.number="detail.onlineTimeout">
               <template #prepend>设备超时时间</template>
@@ -137,7 +109,7 @@
                 <div class="wu-title">
                   <div class="title">属性定义</div>
                   <div>
-                    <el-button type="primary" v-auth="'add'" @click="onOpenEditAttr()">添加</el-button>
+                    <el-button size="small" type="primary" v-auth="'add'" @click="onOpenEditAttr()">添加</el-button>
                   </div>
                 </div>
 
@@ -168,12 +140,9 @@
                   <el-table-column label="说明" prop="desc" show-overflow-tooltip />
                   <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>
@@ -182,7 +151,7 @@
                 <div class="wu-title">
                   <div class="title">功能定义</div>
                   <div>
-                    <el-button type="primary" v-auth="'add'" @click="onOpenEditFun()">添加</el-button>
+                    <el-button size="small" type="primary" v-auth="'add'" @click="onOpenEditFun()">添加</el-button>
                   </div>
                 </div>
 
@@ -193,10 +162,8 @@
                   <el-table-column label="描述" prop="desc" show-overflow-tooltip />
                   <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>
@@ -205,7 +172,7 @@
                 <div class="wu-title">
                   <div class="title">事件定义</div>
                   <div>
-                    <el-button type="primary" v-auth="'add'" @click="onOpenEditEvent()">添加</el-button>
+                    <el-button type="primary" size="small" v-auth="'add'" @click="onOpenEditEvent()">添加</el-button>
                   </div>
                 </div>
 
@@ -223,10 +190,8 @@
 
                   <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,7 +200,7 @@
                 <div class="wu-title">
                   <div class="title">标签定义</div>
                   <div>
-                    <el-button type="primary" v-auth="'add'" @click="onOpenEditTab()">添加</el-button>
+                    <el-button size="small" type="primary" v-auth="'add'" @click="onOpenEditTab()">添加</el-button>
                   </div>
                 </div>
 
@@ -257,22 +222,18 @@
                   <el-table-column label="描述" prop="desc" show-overflow-tooltip />
                   <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">
@@ -284,8 +245,7 @@
               </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-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>
               <el-form-item>
                 <el-button type="primary" class="ml10" @click="getlog">
@@ -315,8 +275,7 @@
             </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">
@@ -324,13 +283,11 @@
               <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 />
               <el-table-column label="设备名称" prop="name" show-overflow-tooltip />
@@ -348,16 +305,12 @@
 
               <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>
@@ -474,7 +427,7 @@ export default defineComponent({
   setup(prop, context) {
     const logqueryRef = ref();
 
-    const array_list=ref([]);
+    const array_list = ref([]);
     const route = useRoute();
     const editDicRef = ref();
     const setAttrRef = ref();
@@ -812,8 +765,8 @@ export default defineComponent({
       }
     };
 
-    const getValueText=(key, value)=>{
-      let data =array_list.value;
+    const getValueText = (key, value) => {
+      let data = array_list.value;
       for (let i = 0; i < data.length; i++) {
         const item = data[i];
         if (item.key === key) {
@@ -830,8 +783,8 @@ export default defineComponent({
 
       return value;
     }
-    const getStatusText=(name, value) =>{
-      let data =array_list.value;
+    const getStatusText = (name, value) => {
+      let data = array_list.value;
       for (let i = 0; i < data.length; i++) {
         const field = data[i];
         if (field.valueType.type === "object") {
@@ -842,7 +795,7 @@ export default defineComponent({
                 const element = property.valueType.elements.find((element) => element.value === value);
                 if (element) {
                   return `${property.name}: ${element.text}`;
-                }else{
+                } else {
                   return `${property.name}: ${value}`;
                 }
               } else {
@@ -863,7 +816,7 @@ export default defineComponent({
         }
       }
 
-      return name+':'+value;
+      return name + ':' + value;
     }
 
     const getrunData = () => {
@@ -918,12 +871,12 @@ export default defineComponent({
         state.logtableData.total = res.Total;
       });
     };
-        	/** 重置按钮操作 */
-		const resetQuery = (formEl: FormInstance | undefined) => {
-			if (!formEl) return;
-			formEl.resetFields();
-			getlog();
-		};
+    /** 重置按钮操作 */
+    const resetQuery = (formEl: FormInstance | undefined) => {
+      if (!formEl) return;
+      formEl.resetFields();
+      getlog();
+    };
 
     const CkOption = () => {
       if (state.developer_status == 2) {
@@ -1014,7 +967,7 @@ export default defineComponent({
   },
 });
 </script>
-<style>
+<style scoped>
 .oblist {
   display: flex;
   flex-direction: row;
@@ -1026,16 +979,13 @@ export default defineComponent({
 }
 
 .content {
-  background: #fff;
   width: 100%;
-  padding: 20px;
+  padding: 20px 20px;
 }
 
 .content-box {
-  background: #fff;
   width: 100%;
-  padding: 20px;
-  margin-top: 20px;
+  padding: 0 20px;
 }
 
 .cont_box {
@@ -1114,54 +1064,6 @@ tr {
   border-color: inherit;
 }
 
-.ant-descriptions-view {
-  width: 100%;
-  overflow: hidden;
-  border-radius: 4px;
-}
-
-.ant-descriptions-view {
-  border: 1px solid #e8e8e8;
-}
-
-.ant-descriptions-view table {
-  width: 100%;
-  table-layout: fixed;
-}
-
-.ant-descriptions-view>table {
-  table-layout: auto;
-}
-
-.ant-descriptions-row {
-  border-bottom: 1px solid #e8e8e8;
-}
-
-.ant-descriptions-item-label {
-  color: rgba(0, 0, 0, 0.85);
-  font-weight: 400;
-  font-size: 14px;
-  line-height: 1.5;
-}
-
-.ant-descriptions-item-label {
-  padding: 16px 24px;
-  border-right: 1px solid #e8e8e8;
-}
-
-.ant-descriptions-item-label {
-  background-color: #fafafa;
-}
-
-.ant-descriptions-item-content {
-  padding: 16px 24px;
-  border-right: 1px solid #e8e8e8;
-  display: table-cell;
-  color: rgba(0, 0, 0, 0.65);
-  font-size: 14px;
-  line-height: 1.5;
-}
-
 .wu-box {
   border: #e8e8e8 solid 1px;
   padding: 20px;
@@ -1216,6 +1118,7 @@ tr {
   margin-top: 20px;
   height: 30px;
   line-height: 30px;
-}</style>
+}
+</style>
 
 

+ 32 - 23
src/views/iot/device/instance/index.vue

@@ -3,14 +3,14 @@
     <el-card shadow="nover" v-loading="batchLoading">
       <div class="system-user-search mb15">
         <el-form :model="tableData.param" ref="queryRef" inline>
-          <el-form-item label="设备名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入设备名称" clearable style="width: 180px" @keyup.enter.native="typeList" />
+          <el-form-item label="名称" prop="name">
+            <el-input v-model="tableData.param.name" placeholder="请输入设备名称" clearable style="width: 170px" @keyup.enter.native="typeList" />
           </el-form-item>
-          <el-form-item label="设备标识" prop="key">
-            <el-input v-model="tableData.param.key" placeholder="请输入设备标识" clearable style="width: 180px" @keyup.enter.native="typeList" />
+          <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: 150px" filterable placeholder="请选择产品">
+            <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-select>
           </el-form-item>
@@ -33,19 +33,19 @@
               </el-icon>
               查询
             </el-button>
-            <el-button @click="resetQuery(queryRef)">
+            <!-- <el-button @click="resetQuery(queryRef)">
               <el-icon>
                 <ele-Refresh />
               </el-icon>
               重置
-            </el-button>
+            </el-button> -->
             <el-button type="primary" class="ml10" @click="onOpenAddDic" v-auth="'add'">
               <el-icon>
                 <ele-FolderAdd />
               </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>
@@ -54,34 +54,43 @@
 
             <el-dropdown>
               <el-button type="danger" class="ml10">
-                更多操作<el-icon class="el-icon--right"><arrow-down /></el-icon>
+                更多
+                <el-icon class="el-icon--right"><arrow-down /></el-icon>
               </el-button>
               <template #dropdown>
                 <el-dropdown-menu>
-                  <el-dropdown-item> <el-button type="success" @click="setDeviceStatus1(null)">
+                  <el-dropdown-item>
+                    <el-button type="success" @click="setDeviceStatus1()">
                       <el-icon>
-                        <ele-Delete />
+                        <ele-Open />
                       </el-icon>
                       批量启用
-                    </el-button></el-dropdown-item>
-                  <el-dropdown-item><el-button type="warning" @click="setDeviceStatus0(null)">
+                    </el-button>
+                  </el-dropdown-item>
+                  <el-dropdown-item>
+                    <el-button type="warning" @click="setDeviceStatus0()">
                       <el-icon>
-                        <ele-Delete />
+                        <ele-TurnOff />
                       </el-icon>
                       批量禁用
-                    </el-button></el-dropdown-item>
-                  <el-dropdown-item> <el-button @click="onOpenexcelDic('upload')">
+                    </el-button>
+                  </el-dropdown-item>
+                  <el-dropdown-item>
+                    <el-button @click="onOpenexcelDic('upload')">
                       <el-icon>
                         <ele-Upload />
                       </el-icon>
                       导入设备
-                    </el-button></el-dropdown-item>
-                  <el-dropdown-item><el-button @click="onOpenexcelDic('down')">
+                    </el-button>
+                  </el-dropdown-item>
+                  <el-dropdown-item>
+                    <el-button @click="onOpenexcelDic('down')">
                       <el-icon>
                         <ele-Download />
                       </el-icon>
                       导出设备
-                    </el-button></el-dropdown-item>
+                    </el-button>
+                  </el-dropdown-item>
                 </el-dropdown-menu>
               </template>
             </el-dropdown>
@@ -224,7 +233,7 @@ export default defineComponent({
     };
 
     //批量启用
-    const setDeviceStatus1 = (row: TableDataRow) => {
+    const setDeviceStatus1 = (row?: TableDataRow) => {
       let ids: number[] = [];
       if (row) {
         ids = [row.id];
@@ -251,7 +260,7 @@ export default defineComponent({
     }
 
     //批量禁用
-    const setDeviceStatus0 = (row: TableDataRow) => {
+    const setDeviceStatus0 = (row?: TableDataRow) => {
       let ids: number[] = [];
       if (row) {
         ids = [row.id];
@@ -277,7 +286,7 @@ export default defineComponent({
         .catch(() => { });
     }
     // 删除产品
-    const onRowDel = (row: TableDataRow) => {
+    const onRowDel = (row?: TableDataRow) => {
       let msg = '你确定要删除所选数据?';
       let ids: number[] = [];
       if (row) {

+ 2 - 2
src/views/iot/device/product/component/dataParse.vue

@@ -85,13 +85,13 @@ function mock() {
 </script>
 <style lang="scss" scoped>
 ::v-deep(.CodeMirror) {
-	height: calc(100vh - 360px);
+	height: calc(100vh - 320px);
 }
 
 .input,
 .output {
 	::v-deep(.el-textarea__inner) {
-		height: calc(50vh - 190px);
+		height: calc(50vh - 170px);
 	}
 }
 

+ 175 - 280
src/views/iot/device/product/detail.vue

@@ -1,5 +1,5 @@
 <template>
-	<div class="system-dic-container">
+	<div class="page page-full">
 		<div class="content">
 			<div class="cont_box">
 				<div class="title">产品:{{ detail.name }}</div>
@@ -10,205 +10,181 @@
 			</div>
 		</div>
 
-		<div class="content-box">
-			<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
-				<el-tab-pane label="产品信息" name="1">
-					<div class="pro-box">
-						<div class="protitle">产品信息</div>
-						<el-button type="" :icon="Edit" class="buttonedit" v-auth="'edit'" @click="onOpenEditDic(detail)">编辑</el-button>
-					</div>
-
-					<div class="ant-descriptions-view">
-						<table>
-							<tbody>
-								<tr class="ant-descriptions-row">
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">产品标识</th>
-									<td class="ant-descriptions-item-content" colspan="1">{{ detail.key }}</td>
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">产品分类</th>
-									<td class="ant-descriptions-item-content" colspan="1">{{ detail.categoryName }}</td>
-									<!-- <th class="ant-descriptions-item-label ant-descriptions-item-colon">所属组织</th>
-									<td class="ant-descriptions-item-content" colspan="1">{{ detail.deptName }}</td> -->
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">设备类型</th>
-									<td class="ant-descriptions-item-content" colspan="1">{{ detail.deviceType }}</td>
-								</tr>
-								<tr class="ant-descriptions-row">
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">产品图片</th>
-									<td class="ant-descriptions-item-content" colspan="1">
-										<el-image style="width: 80px; height: 80px" :src="detail.icon" :previewSrcList="[detail.icon]" fit="contain">
-											<template #error>
-												<div class="image-slot">
-													<ele-Picture style="width: 30px;" />
-													加载失败
-												</div>
-											</template>
-										</el-image>
-									</td>
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">消息协议</th>
-									<td class="ant-descriptions-item-content" colspan="1">{{ detail.messageProtocol }}</td>
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">接入方式</th>
-									<td class="ant-descriptions-item-content" colspan="1">{{ detail.transportProtocol }}
-									</td>
-
-								</tr>
-								<tr class="ant-descriptions-row">
-									<th class="ant-descriptions-item-label ant-descriptions-item-colon">描述</th>
-									<td class="ant-descriptions-item-content" colspan="5">{{ detail.desc }}</td>
-								</tr>
-							</tbody>
-						</table>
-					</div>
-				</el-tab-pane>
-				<el-tab-pane label="物模型" name="2">
-					<div class="wu-box">
-						<el-tabs type="border-card" v-model="activetab" @tab-click="wuhandleClick">
-							<el-tab-pane label="属性定义" name="attr">
-								<div class="wu-title">
-									<div class="title">属性定义</div>
-									<div><el-button type="primary" v-auth="'edit'" @click="onOpenEditAttr()">添加</el-button>
-									</div>
-								</div>
-
-								<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'attr'">
-									<el-table-column label="属性标识" align="center" prop="key" />
-									<el-table-column label="属性名称" prop="name" show-overflow-tooltip />
-									<el-table-column prop="valueType" label="数据类型" width="100" align="center">
-										<template #default="scope">
-											<span>{{ scope.row.valueType.type }}</span>
-										</template>
-									</el-table-column>
-									<el-table-column prop="decimals" label="精度" width="60" align="center">
-										<template #default="scope">
-											<span>{{ scope.row.valueType.decimals }}</span>
-										</template>
-									</el-table-column>
-									<el-table-column prop="unit" label="单位" width="60" align="center">
-										<template #default="scope">
-											<span>{{ scope.row.valueType.unit }}</span>
-										</template>
-									</el-table-column>
-									<el-table-column prop="accessMode" label="是否只读" width="120" align="center">
-										<template #default="scope">
-											<el-tag type="info" size="small" v-if="scope.row.accessMode">只读</el-tag>
-											<el-tag type="success" size="small" v-else>读写</el-tag>
-										</template>
-									</el-table-column>
-									<el-table-column label="说明" prop="desc" show-overflow-tooltip />
-									<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>
-										</template>
-									</el-table-column>
-								</el-table>
-							</el-tab-pane>
-							<el-tab-pane label="功能定义" name="fun">
-								<div class="wu-title">
-									<div class="title">功能定义</div>
-									<div><el-button type="primary" v-auth="'add'" @click="onOpenEditFun()">添加</el-button>
-									</div>
-								</div>
+		<el-tabs v-model="activeName" style="padding: 0 20px;" @tab-click="handleClick">
+			<el-tab-pane label="产品信息" name="1">
+				<div class="pro-box">
+					<div class="protitle">产品信息</div>
+					<el-button type="" :icon="Edit" class="buttonedit" v-auth="'edit'" @click="onOpenEditDic(detail)">编辑</el-button>
+				</div>
 
-								<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'fun'">
-									<el-table-column label="功能标识" align="center" prop="key" />
-									<el-table-column label="名称" prop="name" show-overflow-tooltip />
-
-									<el-table-column label="描述" prop="desc" show-overflow-tooltip />
-									<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>
-										</template>
-									</el-table-column>
-								</el-table>
-							</el-tab-pane>
-							<el-tab-pane label="事件定义" name="event">
-								<div class="wu-title">
-									<div class="title">事件定义</div>
-									<div><el-button type="primary" v-auth="'add'" @click="onOpenEditEvent()">添加</el-button>
-									</div>
+				<el-descriptions class="margin-top" :column="3" border>
+					<el-descriptions-item label="产品标识">{{ detail.key }}</el-descriptions-item>
+					<el-descriptions-item label="产品分类">{{ detail.categoryName }}</el-descriptions-item>
+					<el-descriptions-item label="设备类型">{{ detail.deviceType }}</el-descriptions-item>
+					<el-descriptions-item label="产品图片">
+						<el-image style="width: 80px; height: 80px" :src="detail.icon" :previewSrcList="[detail.icon]" fit="contain">
+							<template #error>
+								<div class="image-slot">
+									<ele-Picture style="width: 30px;" />
+									加载失败
 								</div>
+							</template>
+						</el-image>
+					</el-descriptions-item>
+					<el-descriptions-item label="消息协议">{{ detail.messageProtocol }}</el-descriptions-item>
+					<el-descriptions-item label="接入方式">{{ detail.transportProtocol }}</el-descriptions-item>
+					<el-descriptions-item label="描述">{{ detail.desc }}</el-descriptions-item>
+				</el-descriptions>
+			</el-tab-pane>
+			<el-tab-pane label="物模型" name="2">
+				<el-tabs type="border-card" v-model="activetab" @tab-click="wuhandleClick">
+					<el-tab-pane label="属性定义" name="attr">
+						<div class="wu-title">
+							<div class="title">属性定义</div>
+							<div><el-button size="small" type="primary" v-auth="'edit'" @click="onOpenEditAttr()">添加</el-button>
+							</div>
+						</div>
 
-								<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'event'">
-									<el-table-column label="事件标识" align="center" prop="key" />
-									<el-table-column label="名称" prop="name" show-overflow-tooltip />
-									<el-table-column prop="level" label="事件级别" width="120" align="center">
-										<template #default="scope">
-											<el-tag type="primary" size="small" v-if="scope.row.level == 0">普通</el-tag>
-											<el-tag type="warning" size="small" v-if="scope.row.level == 1">警告</el-tag>
-											<el-tag type="danger" size="small" v-if="scope.row.level == 2">紧急</el-tag>
-										</template>
-									</el-table-column>
-									<el-table-column label="描述" prop="desc" show-overflow-tooltip />
-
-									<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>
-										</template>
-									</el-table-column>
-								</el-table>
-							</el-tab-pane>
-							<el-tab-pane label="标签定义" name="tab">
-								<div class="wu-title">
-									<div class="title">标签定义</div>
-									<div><el-button type="primary" v-auth="'add'" @click="onOpenEditTab()">添加</el-button>
-									</div>
-								</div>
+						<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'attr'">
+							<el-table-column label="属性标识" align="center" prop="key" />
+							<el-table-column label="属性名称" prop="name" show-overflow-tooltip />
+							<el-table-column prop="valueType" label="数据类型" width="100" align="center">
+								<template #default="scope">
+									<span>{{ scope.row.valueType.type }}</span>
+								</template>
+							</el-table-column>
+							<el-table-column prop="decimals" label="精度" width="60" align="center">
+								<template #default="scope">
+									<span>{{ scope.row.valueType.decimals }}</span>
+								</template>
+							</el-table-column>
+							<el-table-column prop="unit" label="单位" width="60" align="center">
+								<template #default="scope">
+									<span>{{ scope.row.valueType.unit }}</span>
+								</template>
+							</el-table-column>
+							<el-table-column prop="accessMode" label="是否只读" width="120" align="center">
+								<template #default="scope">
+									<el-tag type="info" size="small" v-if="scope.row.accessMode">只读</el-tag>
+									<el-tag type="success" size="small" v-else>读写</el-tag>
+								</template>
+							</el-table-column>
+							<el-table-column label="说明" prop="desc" show-overflow-tooltip />
+							<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>
+								</template>
+							</el-table-column>
+						</el-table>
+					</el-tab-pane>
+					<el-tab-pane label="功能定义" name="fun">
+						<div class="wu-title">
+							<div class="title">功能定义</div>
+							<div><el-button size="small" type="primary" v-auth="'add'" @click="onOpenEditFun()">添加</el-button>
+							</div>
+						</div>
 
-								<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'tab'">
-									<el-table-column label="属性标识" align="center" prop="key" />
-									<el-table-column label="属性名称" prop="name" show-overflow-tooltip />
-									<el-table-column prop="valueType" label="数据类型" width="120" align="center">
-										<template #default="scope">
-											<span>{{ scope.row.valueType.type }}</span>
-										</template>
-									</el-table-column>
-									<el-table-column prop="accessMode" label="是否只读" width="120" align="center">
-										<template #default="scope">
-											<el-tag type="info" size="small" v-if="scope.row.accessMode">只读</el-tag>
-											<el-tag type="success" size="small" v-else>读写</el-tag>
-										</template>
-									</el-table-column>
-									<el-table-column label="描述" prop="desc" show-overflow-tooltip />
-									<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>
-										</template>
-									</el-table-column>
-								</el-table>
-							</el-tab-pane>
-						</el-tabs>
-						<div class="import">
-							<div class="row_bet">
-								<el-upload accept="json" :show-file-list="false" :limit="1" :data="{ key: detail.key }" :headers="headers" :action="uploadUrl" :on-success="updateImg">
-									<el-button>
-										<el-icon> <ele-Upload /> </el-icon>
-										导入物模型
-									</el-button>
-								</el-upload>
-								<el-button type="default" class="ml10" @click="onRowExport()">
-									<el-icon>
-										<ele-Download />
-									</el-icon>
-									导出物模型
-								</el-button>
+						<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'fun'">
+							<el-table-column label="功能标识" align="center" prop="key" />
+							<el-table-column label="名称" prop="name" show-overflow-tooltip />
+
+							<el-table-column label="描述" prop="desc" show-overflow-tooltip />
+							<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>
+								</template>
+							</el-table-column>
+						</el-table>
+					</el-tab-pane>
+					<el-tab-pane label="事件定义" name="event">
+						<div class="wu-title">
+							<div class="title">事件定义</div>
+							<div>
+								<el-button size="small" type="primary" v-auth="'add'" @click="onOpenEditEvent()">添加</el-button>
 							</div>
+						</div>
 
+						<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'event'">
+							<el-table-column label="事件标识" align="center" prop="key" />
+							<el-table-column label="名称" prop="name" show-overflow-tooltip />
+							<el-table-column prop="level" label="事件级别" width="120" align="center">
+								<template #default="scope">
+									<el-tag type="primary" size="small" v-if="scope.row.level == 0">普通</el-tag>
+									<el-tag type="warning" size="small" v-if="scope.row.level == 1">警告</el-tag>
+									<el-tag type="danger" size="small" v-if="scope.row.level == 2">紧急</el-tag>
+								</template>
+							</el-table-column>
+							<el-table-column label="描述" prop="desc" show-overflow-tooltip />
+
+							<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>
+								</template>
+							</el-table-column>
+						</el-table>
+					</el-tab-pane>
+					<el-tab-pane label="标签定义" name="tab">
+						<div class="wu-title">
+							<div class="title">标签定义</div>
+							<div><el-button size="small" type="primary" v-auth="'add'" @click="onOpenEditTab()">添加</el-button>
+							</div>
 						</div>
 
-						<pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="getList()" />
+						<el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'tab'">
+							<el-table-column label="属性标识" align="center" prop="key" />
+							<el-table-column label="属性名称" prop="name" show-overflow-tooltip />
+							<el-table-column prop="valueType" label="数据类型" width="120" align="center">
+								<template #default="scope">
+									<span>{{ scope.row.valueType.type }}</span>
+								</template>
+							</el-table-column>
+							<el-table-column prop="accessMode" label="是否只读" width="120" align="center">
+								<template #default="scope">
+									<el-tag type="info" size="small" v-if="scope.row.accessMode">只读</el-tag>
+									<el-tag type="success" size="small" v-else>读写</el-tag>
+								</template>
+							</el-table-column>
+							<el-table-column label="描述" prop="desc" show-overflow-tooltip />
+							<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>
+								</template>
+							</el-table-column>
+						</el-table>
+					</el-tab-pane>
+				</el-tabs>
+				<div class="import">
+					<div class="row_bet">
+						<el-upload accept="json" :show-file-list="false" :limit="1" :data="{ key: detail.key }" :headers="headers" :action="uploadUrl" :on-success="updateImg">
+							<el-button size="small">
+								<el-icon> <ele-Upload /> </el-icon>
+								导入物模型
+							</el-button>
+						</el-upload>
+						<el-button size="small" type="default" class="ml10" @click="onRowExport()">
+							<el-icon>
+								<ele-Download />
+							</el-icon>
+							导出物模型
+						</el-button>
 					</div>
-				</el-tab-pane>
-				<el-tab-pane label="设备接入" name="3">
-					<deviceIn></deviceIn>
-				</el-tab-pane>
-				<el-tab-pane label="数据解析" name="4" lazy>
-					<dataParse v-if="activeName === '4'" :script="detail.scriptInfo" @updateScript="updateScript">
-					</dataParse>
-				</el-tab-pane>
-			</el-tabs>
-		</div>
+
+				</div>
+
+				<pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="getList()" />
+			</el-tab-pane>
+			<el-tab-pane label="设备接入" name="3">
+				<deviceIn></deviceIn>
+			</el-tab-pane>
+			<el-tab-pane label="数据解析" name="4" lazy>
+				<dataParse v-if="activeName === '4'" :script="detail.scriptInfo" @updateScript="updateScript">
+				</dataParse>
+			</el-tab-pane>
+		</el-tabs>
 		<EditDic ref="editDicRef" @typeList="typeList" />
 		<EditAttr ref="editAttrRef" @typeList="getproperty" />
 		<EditFun ref="editFunRef" @typeList="getfunction" />
@@ -542,31 +518,22 @@ export default defineComponent({
 <style scoped>
 .import {
 	position: absolute;
-	top: 26px;
-	right: 35px;
+	top: 8px;
+	right: 12px;
 }
 
 .import .row_bet {
 	display: flex;
 	flex-direction: row;
 	align-items: center;
-	padding-right: 5px;
 	flex: 1;
 }
 
 .content {
-	background: #fff;
 	width: 100%;
 	padding: 20px;
 }
 
-.content-box {
-	background: #fff;
-	width: 100%;
-	padding: 20px;
-	margin-top: 20px;
-}
-
 .cont_box {
 	display: flex;
 }
@@ -606,96 +573,24 @@ export default defineComponent({
 	cursor: pointer;
 }
 
-.content-box .pro-box {
+.pro-box {
 	display: flex;
 	padding: 10px;
+	align-items: center;
 }
 
-.content-box .pro-box .protitle {
+.pro-box .protitle {
 	font-size: 18px;
 	font-weight: bold;
 	line-height: 35px;
 }
 
-.content-box .pro-box .buttonedit {
+.pro-box .buttonedit {
 	border: 0px;
 	color: #1890ff;
 }
 
-table {
-	border-collapse: collapse;
-	text-indent: initial;
-	border-spacing: 2px;
-}
-
-tbody {
-	box-sizing: border-box;
-	display: table-row-group;
-	vertical-align: middle;
-	border-color: inherit;
-}
-
-tr {
-	display: table-row;
-	vertical-align: inherit;
-	border-color: inherit;
-}
-
-.ant-descriptions-view {
-	width: 100%;
-	overflow: hidden;
-	border-radius: 4px;
-}
-
-.ant-descriptions-view {
-	border: 1px solid #e8e8e8;
-}
-
-.ant-descriptions-view table {
-	width: 100%;
-	table-layout: fixed;
-}
-
-.ant-descriptions-view>table {
-	table-layout: auto;
-}
-
-.ant-descriptions-row {
-	border-bottom: 1px solid #e8e8e8;
-}
-
-.ant-descriptions-item-label {
-	color: rgba(0, 0, 0, 0.85);
-	font-weight: 400;
-	font-size: 14px;
-	line-height: 1.5;
-}
-
-.ant-descriptions-item-label {
-	padding: 16px 24px;
-	border-right: 1px solid #e8e8e8;
-}
-
-.ant-descriptions-item-label {
-	background-color: #fafafa;
-}
-
-.ant-descriptions-item-content {
-	padding: 16px 24px;
-	border-right: 1px solid #e8e8e8;
-	display: table-cell;
-	color: rgba(0, 0, 0, 0.65);
-	font-size: 14px;
-	line-height: 1.5;
-}
-
-.wu-box {
-	border: #e8e8e8 solid 1px;
-	padding: 20px;
-	width: 100%;
-}
-
-.wu-box .wu-title {
+.wu-title {
 	display: flex;
 	flex-direction: row;
 	justify-content: space-between;
@@ -703,7 +598,7 @@ tr {
 	border-bottom: #e8e8e8 1px solid;
 }
 
-.wu-box .wu-title .title {
+.wu-title .title {
 	font-size: 18px;
 }
 </style>

+ 2 - 2
src/views/iot/device/product/index.vue

@@ -24,12 +24,12 @@
             </el-icon>
             查询
           </el-button>
-          <el-button @click="resetQuery(queryRef)">
+          <!-- <el-button @click="resetQuery(queryRef)">
             <el-icon>
               <ele-Refresh />
             </el-icon>
             重置
-          </el-button>
+          </el-button> -->
           <el-button type="primary" class="ml10" @click="onOpenAddDic" v-auth="'add'">
             <el-icon>
               <ele-FolderAdd />

+ 3 - 1
src/views/iot/property/dossier/edit.vue

@@ -16,7 +16,7 @@
 
         <el-col :span="12">
           <el-form-item label="选择设备" prop="deviceKey">
-            <el-select v-model="formData.deviceKey" placeholder="请选择设备" class="w100" clearable @change="handleSelectionChange">
+            <el-select v-model="formData.deviceKey" placeholder="请选择设备" class="w100" filterable clearable @change="handleSelectionChange">
               <el-option v-for="item in deviceList" :key="item.key" :label="item.name" :value="item.key">
                 <span style="float: left">{{ item.name }}</span>
                 <span style="float: right; font-size: 13px">{{ item.key }}</span>
@@ -224,6 +224,8 @@ const open = async (row: any, productInfo: any) => {
         const sortedArray = res.Data.sort((a, b) => a.id - b.id);
 				Datalist.value = sortedArray || [];
       });
+      formData.productKey = productInfo.key
+
     }
   });
 };

+ 7 - 2
src/views/iot/property/dossier/index.vue

@@ -44,7 +44,7 @@
               <div class="custom-tree-node">
                   <span class="tree-label">
                     <el-icon v-if="data.is_type == '2'">
-                      <Check />
+                      <Expand />
                     </el-icon>
                     {{ node.label }}
                   </span>
@@ -83,7 +83,7 @@
 <script lang="ts" setup>
 import device from '/@/api/device'
 import { useSearch } from '/@/hooks/useCommon'
-import { Check } from '@element-plus/icons-vue'
+import { Expand } from '@element-plus/icons-vue'
 
 import { ElMessageBox, ElMessage } from 'element-plus'
 import EditForm from './edit.vue'
@@ -129,6 +129,11 @@ const getCateList = () => {
 		device.product.getLists({}).then((res: any) => {
 			productData.value = res.product
 			mergedData.value = matchProductsToCategories(productData.value, cateData.value)
+
+      // 默认加载第一个设备对应属性
+      if (productData.value.length > 0) {
+        handleNodeClick(mergedData.value[0].children[0])
+      }
 		})
 	})
 }

+ 3 - 2
src/views/system/basicConfig/index.vue

@@ -1,7 +1,7 @@
 <template>
-	<div class="page padding">
+	<div class="page">
 		<el-card shadow="nover">
-			<el-menu :default-active="activeName" @select="menuChange" class="el-menu-vertical-demo" size="small">
+			<el-menu style="--el-menu-bg-color: transparent; --el-menu-hover-bg-color: rgba(0, 0, 0, 0.2); --el-menu-level: 0;" :default-active="activeName" @select="menuChange" class="el-menu-vertical-demo" size="small">
 				<el-menu-item index="1">基础配置</el-menu-item>
 				<el-menu-item index="2">安全配置</el-menu-item>
 			</el-menu>
@@ -43,6 +43,7 @@ function menuChange(index: string) {
 	.el-card:last-child {
 		flex: 1;
 	}
+
 	.el-card ::v-deep(.el-card__body) {
 		flex: 1;
 		height: 100%;

+ 3 - 3
src/views/system/monitor/server/index.vue

@@ -434,7 +434,7 @@ export default defineComponent({
             },
             axisLabel: {
               distance: 12,
-              color: '#000',
+              color: '#888',
               fontSize: 12
             },
             splitLine: { // 分割线
@@ -508,7 +508,7 @@ export default defineComponent({
             },
             axisLabel: {
               distance: 12,
-              color: '#000',
+              color: '#888',
               fontSize: 12
             },
             splitLine: { // 分割线
@@ -582,7 +582,7 @@ export default defineComponent({
             },
             axisLabel: {
               distance: 12,
-              color: '#000',
+              color: '#888',
               fontSize: 12
             },
             splitLine: { // 分割线

Some files were not shown because too many files changed in this diff