diff --git a/src/views/device/components/Metadata/Base/Base.vue b/src/views/device/components/Metadata/Base/Base.vue
index 8d0ab6eb..3649d91b 100644
--- a/src/views/device/components/Metadata/Base/Base.vue
+++ b/src/views/device/components/Metadata/Base/Base.vue
@@ -89,7 +89,7 @@
{{ sourceMap?.[data.record?.expands?.source] || '' }}
-
+
{{ data.record.output?.type }}
@@ -101,7 +101,7 @@
{{ levelMap?.[data.record.expands?.level] || '-' }}
-
+
object
@@ -112,7 +112,7 @@
-
+
diff --git a/src/views/device/components/Metadata/Base/columns.tsx b/src/views/device/components/Metadata/Base/columns.tsx
index 4426550b..0969b385 100644
--- a/src/views/device/components/Metadata/Base/columns.tsx
+++ b/src/views/device/components/Metadata/Base/columns.tsx
@@ -4,7 +4,7 @@ import SelectColumn from './components/Events/SelectColumn.vue';
import AsyncSelect from './components/Function/AsyncSelect.vue';
import { EventLevel } from "@/views/device/data";
import {MetadataType} from "@/views/device/Product/typings";
-import rule from "components/Metadata/Rule";
+import { getUnit } from '@/api/device/instance';
import {Ref} from "vue";
interface DataTableColumnProps extends ColumnProps {
type?: string,
@@ -352,6 +352,25 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n
return {columns}
}
+export const useUnit = (type: Ref) => {
+ const unitOptions = ref>([])
+
+ watch(() => type.value, () => {
+ if (['float', 'double', 'int', 'long'].includes(type.value) && !unitOptions.value.length) {
+ getUnit().then((res) => {
+ if (res.success) {
+ unitOptions.value = res.result.map((item: any) => ({
+ label: item.description,
+ value: item.id,
+ }));
+ }
+ });
+ }
+ })
+
+ return { unitOptions }
+}
+
// const MetadataMapping = new Map();
// MetadataMapping.set('properties', PropertyColumns);
diff --git a/src/views/device/components/Metadata/Base/components/ConfigModal.vue b/src/views/device/components/Metadata/Base/components/ConfigModal.vue
index e492ec86..75cce7de 100644
--- a/src/views/device/components/Metadata/Base/components/ConfigModal.vue
+++ b/src/views/device/components/Metadata/Base/components/ConfigModal.vue
@@ -2,7 +2,7 @@
@@ -17,8 +17,44 @@
placement="topRight"
:onAdd="objectAdd"
:columns="[
- { title: '参数标识', dataIndex: 'id', type: 'text', width: 100 },
- { title: '参数名称', dataIndex: 'name', type: 'text', width: 100 },
+ {
+ title: '参数标识',
+ dataIndex: 'id',
+ type: 'text',
+ width: 100,
+ form: {
+ required: true,
+ rules: [
+ {
+ callback(rule:any,value: any, _dataSource: any[]) {
+ if (value) {
+ const field = rule.field.split('.')
+ const fieldIndex = Number(field[1])
+ const hasId = _dataSource.some((item, index) => item.id === value && fieldIndex !== index)
+ if (hasId) {
+ return Promise.reject('该标识存在')
+ }
+ return Promise.resolve()
+ }
+ return Promise.reject('请输入标识')
+ }
+ }
+ ]
+ }
+ },
+ {
+ title: '参数名称',
+ dataIndex: 'name',
+ type: 'text',
+ width: 100,
+ form: {
+ required: true,
+ rules: [{
+ required: true,
+ message: '请输入参数名称'
+ }]
+ }
+ },
{
title: '数据类型',
type: 'components',
@@ -83,7 +119,7 @@
{
return {
@@ -186,6 +223,8 @@ const options = ref([])
const type = ref(props.value?.[props.valueKey]?.type)
+const { unitOptions } = useUnit(type)
+
const myValue = ref(props.value?.[props.valueKey])
const valueChange = () => {
diff --git a/src/views/device/components/Metadata/Base/components/DataType.vue b/src/views/device/components/Metadata/Base/components/DataType.vue
index cf0e3044..87142ea3 100644
--- a/src/views/device/components/Metadata/Base/components/DataType.vue
+++ b/src/views/device/components/Metadata/Base/components/DataType.vue
@@ -6,7 +6,7 @@
{valueChange(data, 'array')}"
/>
@@ -22,7 +22,7 @@
-
+
{valueChange(data, 'enum')}"/>
@@ -68,7 +68,7 @@ import {
DataTableObject,
} from 'jetlinks-ui-components';
import { cloneDeep } from 'lodash-es';
-import {handleTypeValue, typeSelectChange} from '../columns'
+import {handleTypeValue, typeSelectChange, useUnit } from '../columns'
import ConfigModal from './ConfigModal.vue'
const props = defineProps({
@@ -155,22 +155,24 @@ const valueChange = (_data: any, _type: string) => {
});
}
+const { unitOptions } = useUnit(type)
+
watch(
() => JSON.stringify(props.value),
() => {
type.value = props.value?.valueType?.type;
_valueType.value = props.value?.valueType
// elements.value = props.value?.valueType.elements;
- if (['float', 'double', 'int', 'long'].includes(type.value)) {
- const res = getUnit().then((res) => {
- if (res.success) {
- options.value = res.result.map((item) => ({
- label: item.description,
- value: item.id,
- }));
- }
- });
- }
+ // if (['float', 'double', 'int', 'long'].includes(type.value)) {
+ // const res = getUnit().then((res) => {
+ // if (res.success) {
+ // options.value = res.result.map((item) => ({
+ // label: item.description,
+ // value: item.id,
+ // }));
+ // }
+ // });
+ // }
},
{ immediate: true },
);
diff --git a/src/views/device/components/Metadata/Base/components/DataTypeObjectChild.vue b/src/views/device/components/Metadata/Base/components/DataTypeObjectChild.vue
index de821096..02f6a36a 100644
--- a/src/views/device/components/Metadata/Base/components/DataTypeObjectChild.vue
+++ b/src/views/device/components/Metadata/Base/components/DataTypeObjectChild.vue
@@ -29,7 +29,6 @@