Преглед на файлове

fix: 1. 修复功能定义,属性定义布尔类型对应不生效的问题。2. 优化物模型类别切换时候loading显示,

yanglzh преди 1 година
родител
ревизия
b1af3ffed3

+ 12 - 3
src/views/iot/device/instance/component/function.vue

@@ -12,6 +12,10 @@
 								<el-select v-model="row.value" clearable v-if="row.valueType.type === 'enum'" style="wdith: 100% !important;">
 									<el-option v-for="item in row.valueType.elements" :key="item.value" :value="item.text" :label="item.text"></el-option>
 								</el-select>
+								<el-radio-group v-model="row.value" v-else-if="row.valueType.type === 'boolean'">
+									<el-radio :label="true">{{ row.valueType.trueText || '是' }}</el-radio>
+									<el-radio :label="false">{{ row.valueType.falseText || '否' }}</el-radio>
+								</el-radio-group>
 								<el-input v-model="row.value" clearable v-else :placeholder="row.valueType.type === 'array' ? 'JSON.stringify(arr)结果去掉外层单引号' : '请输入'">
 									<template v-if="row.valueType.unit" #append>{{ row.valueType.unit }}</template>
 								</el-input>
@@ -72,16 +76,21 @@ function run(row: IListItem) {
 	row.inputs.forEach(({ key, value, valueType }) => {
 		if (valueType.type === 'array') {
 			try {
-				value = JSON.parse(value)
-				if (typeof value !== 'object') {
+				const newValue = JSON.parse(value)
+				if (typeof newValue !== 'object') {
 					throw new Error()
 				}
+				params[key] = newValue
 			} catch (error: any) {
 				ElMessage.error('请输入正确的JSON数组字符串格式')
 				throw (error)
 			}
+		} else if (['int', 'float', 'double'].includes(valueType.type)) {
+			// 设置参数 数字类型转为number 长整型不能转,会丢失精度
+			params[key] = Number(value)
+		} else {
+			params[key] = value
 		}
-		params[key] = value
 	})
 	row.loading = true
 	api.tabDeviceFucntion

+ 20 - 12
src/views/iot/device/instance/detail.vue

@@ -111,7 +111,7 @@
                 </div>
               </div>
 
-              <el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'attr'">
+              <el-table style="width: 100%" :data="tableData.data" v-loading="tableLoading" 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">
@@ -153,7 +153,7 @@
                 </div>
               </div>
 
-              <el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'fun'">
+              <el-table style="width: 100%" :data="tableData.data" v-loading="tableLoading" v-if="activetab == 'fun'">
                 <el-table-column label="功能标识" align="center" prop="key" />
                 <el-table-column label="名称" prop="name" show-overflow-tooltip />
 
@@ -174,7 +174,7 @@
                 </div>
               </div>
 
-              <el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'event'">
+              <el-table style="width: 100%" :data="tableData.data" v-loading="tableLoading" 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">
@@ -203,7 +203,7 @@
               </div>
 
 
-              <el-table style="width: 100%" :data="tableData.data" v-if="activetab == 'tab'">
+              <el-table style="width: 100%" :data="tableData.data" v-loading="tableLoading" 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">
@@ -460,6 +460,7 @@ export default defineComponent({
     const propertyMap = new Map()
 
     const array_list = ref([]);
+    const tableLoading = ref(false);
     const route = useRoute();
     const editDicRef = ref();
     const setAttrRef = ref();
@@ -657,12 +658,12 @@ export default defineComponent({
     }
 
     const getDeviceTableData = () => {
+      state.deviceTableData.data = []
       state.deviceTableData.param.gatewayKey = state.detail.key;
       api.device.getList(state.deviceTableData.param).then((res: any) => {
         state.deviceTableData.data = res.list;
-
         state.deviceTableData.total = res.Total;
-      });
+      })
     };
 
     // 多选框选中数据
@@ -816,32 +817,38 @@ export default defineComponent({
     };
 
     const getproperty = () => {
+      state.tableData.data = []
+      tableLoading.value = true
       api.model.property(state.tableData.param).then((res: any) => {
         state.tableData.data = res.Data;
-
         state.tableData.total = res.Total;
-      });
+      }).finally(() => tableLoading.value = false)
     };
 
     const getfunction = () => {
+      state.tableData.data = []
+      tableLoading.value = true
       api.model.function(state.tableData.param).then((res: any) => {
         state.tableData.data = res.Data;
         state.tableData.total = res.Total;
-      });
+      }).finally(() => tableLoading.value = false)
     };
     const getevent = () => {
+      state.tableData.data = []
+      tableLoading.value = true
       api.model.event(state.tableData.param).then((res: any) => {
         state.tableData.data = res.Data;
         state.tableData.total = res.Total;
-      });
+      }).finally(() => tableLoading.value = false)
     };
 
     const gettab = () => {
+      state.tableData.data = []
+      tableLoading.value = true
       api.model.tag(state.tableData.param).then((res: any) => {
         state.tableData.data = res.Data;
-
         state.tableData.total = res.Total;
-      });
+      }).finally(() => tableLoading.value = false)
     };
 
     const wuhandleClick = (tab: any) => {
@@ -1025,6 +1032,7 @@ export default defineComponent({
       editTabRef,
       subDeviceRef,
       mutipleBindRef,
+      tableLoading,
       editAssetRef,
       dataList,
       deviceAssetMetadata,

+ 34 - 43
src/views/iot/device/product/component/editAttr.vue

@@ -36,14 +36,14 @@
 				</el-form-item>
 
 				<el-form-item label="布尔值" prop="trueText" v-if="type == 'boolean'">
-					<div class="input-box">
-						<el-input v-model="valueType.trueText" placeholder="请输入布尔值" value="是" /><span style="margin: 0px 10px">~</span>
-						<el-input v-model="valueType.trueValue" placeholder="请输入布尔值" value="true" />
+					<div class="input-box flex-row">
+						<el-input v-model="valueType.trueText" placeholder="请输入true时显示的文字" /><span style="margin: 0px 10px">~</span>
+						<el-input v-model="valueType.trueValue" placeholder="请输入布尔值" disabled />
 					</div>
 
-					<div class="input-box">
-						<el-input v-model="valueType.falseText" placeholder="请输入布尔值" value="否" /> <span style="margin: 0px 10px">~</span>
-						<el-input v-model="valueType.falseValue" placeholder="请输入布尔值" value="false" />
+					<div class="input-box flex-row">
+						<el-input v-model="valueType.falseText" placeholder="请输入false时显示的文字" /> <span style="margin: 0px 10px">~</span>
+						<el-input v-model="valueType.falseValue" placeholder="请输入布尔值" disabled />
 					</div>
 				</el-form-item>
 
@@ -71,7 +71,7 @@
 							<div>参数名称:{{ item.name }}</div>
 							<div>数据类型:{{ item.valueType.type }}</div>
 							<div class="jsonoption">
-								<el-link type="primary"  @click="editjson(index)">编辑</el-link>
+								<el-link type="primary" @click="editjson(index)">编辑</el-link>
 								<el-link type="primary" @click="deljson(index)">删除</el-link>
 							</div>
 						</div>
@@ -113,14 +113,14 @@
 					</el-form-item>
 
 					<el-form-item label="布尔值" prop="maxLength" v-if="types == 'boolean'">
-						<div class="input-box">
-							<el-input v-model="elementType.trueText" placeholder="请输入布尔值" value="是" /><span style="margin: 0px 10px">~</span>
-							<el-input v-model="elementType.trueValue" placeholder="请输入布尔值" value="true" />
+						<div class="input-box flex-row">
+							<el-input v-model="elementType.trueText" placeholder="请输入true时显示的文字" /><span style="margin: 0px 10px">~</span>
+							<el-input v-model="elementType.trueValue" placeholder="请输入布尔值" disabled />
 						</div>
 
-						<div class="input-box">
-							<el-input v-model="elementType.falseText" placeholder="请输入布尔值" value="否" /> <span style="margin: 0px 10px">~</span>
-							<el-input v-model="elementType.falseValue" placeholder="请输入布尔值" value="false" />
+						<div class="input-box flex-row">
+							<el-input v-model="elementType.falseText" placeholder="请输入false时显示的文字" /> <span style="margin: 0px 10px">~</span>
+							<el-input v-model="elementType.falseValue" placeholder="请输入布尔值" disabled />
 						</div>
 					</el-form-item>
 
@@ -150,7 +150,7 @@
 							<div>参数名称:{{ item.name }}</div>
 							<div>数据类型:{{ item.valueType.type }}</div>
 							<div class="jsonoption">
-								<el-link type="primary"  @click="editjson(index)">编辑</el-link>
+								<el-link type="primary" @click="editjson(index)">编辑</el-link>
 								<el-link type="primary" @click="deljson(index)">删除</el-link>
 							</div>
 						</div>
@@ -213,6 +213,15 @@ interface DicState {
 	rules: {};
 }
 
+const valueType = {
+	type: '',
+	maxLength: '',
+	trueText: '是',
+	trueValue: true,
+	falseText: '否',
+	falseValue: false,
+}
+
 export default defineComponent({
 	name: 'deviceEditPro',
 	components: { Plus, Minus, Right, EditOption },
@@ -225,18 +234,8 @@ export default defineComponent({
 			type: '',
 			types: '',
 			productKey: '',
-			valueType: {
-				type: '',
-				maxLength: '',
-				trueText: '是',
-				trueValue: 'true',
-				falseText: '否',
-				falseValue: 'false',
-			},
-			elementType: {
-				type: '',
-				maxLength: '',
-			},
+			valueType: JSON.parse(JSON.stringify(valueType)),
+			elementType: JSON.parse(JSON.stringify(valueType)),
 			enumdata: [
 				{
 					text: '',
@@ -254,18 +253,14 @@ export default defineComponent({
 				transportProtocol: '',
 				accessMode: 1,
 				status: 1,
-				valueType: {
-					type: '',
-					maxLength: '',
-				},
-
+				valueType: JSON.parse(JSON.stringify(valueType)),
 				desc: '',
 			},
 			rules: {
-				name: [ { required: true, message: '属性定义名称不能为空', trigger: 'blur' },
-        				{ max: 32, message: '属性定义名称不能超过32个字符', trigger: 'blur' },
-						{ validator: validateNoSpace, message: '属性定义名称不能包含空格', trigger: 'blur' }
-					],
+				name: [{ required: true, message: '属性定义名称不能为空', trigger: 'blur' },
+				{ max: 32, message: '属性定义名称不能超过32个字符', trigger: 'blur' },
+				{ validator: validateNoSpace, message: '属性定义名称不能包含空格', trigger: 'blur' }
+				],
 				key: [{ required: true, message: '属性定义标识不能为空', trigger: 'blur' }],
 				accessMode: [{ required: true, message: '请选择是否只读', trigger: 'blur' }],
 				type: [{ required: true, message: '请选择数据类型', trigger: 'blur' }],
@@ -330,18 +325,14 @@ export default defineComponent({
 				transportProtocol: '',
 				accessMode: 1,
 				status: 1,
-				valueType: {
-					type: '',
-					maxLength: '',
-				},
-
+				valueType: JSON.parse(JSON.stringify(valueType)),
 				desc: '',
 
 			};
 			state.type = '';
 			state.types = '';
-			state.valueType = {};
-			state.elementType = {};
+			state.valueType = JSON.parse(JSON.stringify(valueType));
+			state.elementType = JSON.parse(JSON.stringify(valueType));
 			state.jsondata = [];
 			state.enumdata = [{
 				text: '',
@@ -367,7 +358,7 @@ export default defineComponent({
 			state.enumdata.splice(index, 1);
 		};
 
-		const editjson=(index)=>{
+		const editjson = (index) => {
 
 			editOptionRef.value.openDialog(state.jsondata[index]);
 

+ 6 - 6
src/views/iot/device/product/component/editOption.vue

@@ -67,22 +67,22 @@ const valueTypeBase = {
 	// min: null,
 	unit: null,
 	decimals: null,
-	trueText: null,
-	falseText: null,
-	trueValue: null,
-	falseValue: null,
+	trueText: '是',
+	falseText: '否',
+	trueValue: true,
+	falseValue: false,
 	type: null,
 	maxLength: null,
 }
 
 const valueType = {
-	...valueTypeBase,
+	...JSON.parse(JSON.stringify(valueTypeBase)),
 	properties: [{
 		'key': '',
 		'name': '',
 		'desc': '',
 		'valueType': {
-			...valueTypeBase,
+			...JSON.parse(JSON.stringify(valueTypeBase)),
 			elements: [{
 				'text': '',
 				'value': ''

+ 15 - 15
src/views/iot/device/product/component/editTab.vue

@@ -35,15 +35,15 @@
 					<el-input v-model="valueType.maxLength" placeholder="请输入时间格式" />
 				</el-form-item>
 
-				<el-form-item label="布尔值" prop="trueText" v-if="type == 'boolean'">
-					<div class="input-box">
-						<el-input v-model="valueType.trueText" placeholder="请输入布尔值" value="是" /><span style="margin: 0px 10px">~</span>
-						<el-input v-model="valueType.trueValue" placeholder="请输入布尔值" value="true" />
+				<el-form-item label="布尔值11" prop="trueText" v-if="type == 'boolean'">
+					<div class="input-box flex-row">
+						<el-input v-model="valueType.trueText" placeholder="请输入true时显示的文字" /><span style="margin: 0px 10px">~</span>
+						<el-input v-model="valueType.trueValue" placeholder="请输入布尔值" disabled />
 					</div>
 
-					<div class="input-box">
-						<el-input v-model="valueType.falseText" placeholder="请输入布尔值" value="否" /> <span style="margin: 0px 10px">~</span>
-						<el-input v-model="valueType.falseValue" placeholder="请输入布尔值" value="false" />
+					<div class="input-box flex-row">
+						<el-input v-model="valueType.falseText" placeholder="请输入false时显示的文字" /> <span style="margin: 0px 10px">~</span>
+						<el-input v-model="valueType.falseValue" placeholder="请输入布尔值" disabled />
 					</div>
 				</el-form-item>
 
@@ -112,14 +112,14 @@
 					</el-form-item>
 
 					<el-form-item label="布尔值" prop="maxLength" v-if="types == 'boolean'">
-						<div class="input-box">
-							<el-input v-model="elementType.trueText" placeholder="请输入布尔值" value="是" /><span style="margin: 0px 10px">~</span>
-							<el-input v-model="elementType.trueValue" placeholder="请输入布尔值" value="true" />
+						<div class="input-box flex-row">
+							<el-input v-model="elementType.trueText" placeholder="请输入true时显示的文字" /><span style="margin: 0px 10px">~</span>
+							<el-input v-model="elementType.trueValue" placeholder="请输入布尔值" disabled />
 						</div>
 
-						<div class="input-box">
-							<el-input v-model="elementType.falseText" placeholder="请输入布尔值" value="否" /> <span style="margin: 0px 10px">~</span>
-							<el-input v-model="elementType.falseValue" placeholder="请输入布尔值" value="false" />
+						<div class="input-box flex-row">
+							<el-input v-model="elementType.falseText" placeholder="请输入false时显示的文字" /> <span style="margin: 0px 10px">~</span>
+							<el-input v-model="elementType.falseValue" placeholder="请输入布尔值" disabled />
 						</div>
 					</el-form-item>
 
@@ -255,9 +255,9 @@ export default defineComponent({
 				type: '',
 				maxLength: '',
 				trueText: '是',
-				trueValue: 'true',
+				trueValue: true,
 				falseText: '否',
-				falseValue: 'false',
+				falseValue: false,
 			},
 			elementType: {
 				type: '',

+ 13 - 13
src/views/iot/device/product/component/typeItem.vue

@@ -25,14 +25,14 @@
     </el-form-item>
 
     <el-form-item label="布尔值" v-else-if="valueType.type === 'boolean'">
-      <div class="input-box">
-        <el-input v-model="valueType.trueText" placeholder="请输入布尔值" value="是" /><span style="margin: 0px 10px">~</span>
-        <el-input v-model="valueType.trueValue" placeholder="请输入布尔值" value="true" />
+      <div class="input-box flex-row">
+        <el-input v-model="valueType.trueText" placeholder="请输入true时显示的文字" /><span style="margin: 0px 10px">~</span>
+        <el-input v-model="valueType.trueValue" placeholder="请输入布尔值" disabled />
       </div>
 
-      <div class="input-box">
-        <el-input v-model="valueType.falseText" placeholder="请输入布尔值" value="否" /> <span style="margin: 0px 10px">~</span>
-        <el-input v-model="valueType.falseValue" placeholder="请输入布尔值" value="false" />
+      <div class="input-box flex-row">
+        <el-input v-model="valueType.falseText" placeholder="请输入false时显示的文字" /> <span style="margin: 0px 10px">~</span>
+        <el-input v-model="valueType.falseValue" placeholder="请输入布尔值" disabled />
       </div>
     </el-form-item>
 
@@ -90,8 +90,8 @@ interface IValyeType {
   decimals?: string | null;
   trueText?: string | null;
   falseText?: string | null;
-  trueValue?: string | null;
-  falseValue?: string | null;
+  trueValue?: boolean | null;
+  falseValue?: boolean | null;
   maxLength?: string | null;
   elements: { text: string, value: string }[];
   elementType?: IValyeType;
@@ -104,10 +104,10 @@ const valueTypeBase = {
   // min: null,
   unit: null,
   decimals: null,
-  trueText: null,
-  falseText: null,
-  trueValue: null,
-  falseValue: null,
+  trueText: '是',
+  falseText: '否',
+  trueValue: true,
+  falseValue: false,
   maxLength: null,
   elements: [{
     'text': '',
@@ -140,7 +140,7 @@ const addObject = () => {
     'key': '',
     'name': '',
     'desc': '',
-    valueType: { ...valueTypeBase }
+    valueType: JSON.parse(JSON.stringify(valueTypeBase))
   })
 };