diff --git a/src/components/Metadata/ArrayParam/index.vue b/src/components/Metadata/ArrayParam/index.vue
index aaf336bd..813e0dcc 100644
--- a/src/components/Metadata/ArrayParam/index.vue
+++ b/src/components/Metadata/ArrayParam/index.vue
@@ -3,7 +3,7 @@
@@ -55,7 +55,7 @@ const _value = computed({
const visible = ref(false)
onMounted(() => {
- emit('update:value', { extends: {}, ...props.value })
+ emit('update:value', { expands: {}, ...props.value })
})
\ No newline at end of file
diff --git a/src/views/device/components/Metadata/Base/Edit/ValueTypeForm.vue b/src/views/device/components/Metadata/Base/Edit/ValueTypeForm.vue
index bd509f35..05ed7e8f 100644
--- a/src/views/device/components/Metadata/Base/Edit/ValueTypeForm.vue
+++ b/src/views/device/components/Metadata/Base/Edit/ValueTypeForm.vue
@@ -1,23 +1,23 @@
-
@@ -39,7 +39,7 @@
@@ -62,8 +62,8 @@ import EnumParam from '@/components/Metadata/EnumParam/index.vue'
import ArrayParam from '@/components/Metadata/ArrayParam/index.vue'
import JsonParam from '@/components/Metadata/JsonParam/index.vue'
import { useMetadataStore } from '@/store/metadata';
+import { validateEnum, validateArray, validateJson } from './validator'
import { Rule } from 'ant-design-vue/es/form';
-import { Form } from 'ant-design-vue/es';
type ValueType = Record;
const props = defineProps({
@@ -81,8 +81,16 @@ const props = defineProps({
required: true
},
title: {
- String,
+ type: String,
default: '数据类型'
+ },
+ required: {
+ type: Boolean,
+ default: true
+ },
+ onlyObject: {
+ type: Boolean,
+ default: false
}
})
@@ -108,7 +116,7 @@ watch(_value,
{ deep: true, immediate: true })
onMounted(() => {
- if (metadataStore.model.type === 'events') {
+ if (props.onlyObject) {
_value.value = {
type: 'object',
expands: {}
@@ -141,63 +149,12 @@ const eventDataTypeList = [
]
const changeType = (val: SelectValue) => {
+ if (['float', 'double'].includes(_value.value.type) && _value.value.scale === undefined) {
+ _value.value.scale = 2
+ }
emit('changeType', val as string)
}
-const validateEnum = async (_rule: Rule, val: Record[]) => {
- if (val.length === 0) return Promise.reject(new Error('请配置枚举项'));
- const flag = val.every((item) => {
- return item.value && item.text;
- });
- if (!flag) {
- return Promise.reject(new Error('请配置枚举项'));
- }
- return Promise.resolve();
-}
-
-const validateArray = async (_rule: Rule, val: Record) => {
- if (!val) return Promise.reject(new Error('请输入元素配置'));
- await validateValueType(_rule, val)
- return Promise.resolve();
-}
-
-const validateJson = async (_rule: Rule, val: Record[]) => {
- if (!val || val.length === 0) {
- return Promise.reject(new Error('请输入配置参数'));
- }
- for (let item of val) {
- if (!item) return Promise.reject(new Error('请输入配置参数'));
- await validateValueType(_rule, item)
- }
- return Promise.resolve();
-}
-
-const validateValueType = async (_rule: Rule, val: Record) => {
- if (!val) return Promise.reject(new Error('请输入元素配置'));
- if (!val.id) {
- return Promise.reject(new Error('请输入标识'))
- }
- if (!val.name) {
- return Promise.reject(new Error('请输入名称'))
- }
- if (metadataStore.model.type !== 'functions' && !val.valueType?.type) {
- return Promise.reject(new Error(`请选择${props.title}`))
- }
- if (['enum'].includes(val.valueType.type)) {
- await validateEnum(_rule, val.valueType.elements)
- }
- if (['array'].includes(val.valueType.type)) {
- await validateArray(_rule, val.valueType.elementType)
- }
- if (['object'].includes(val.valueType.type)) {
- await validateJson(_rule, val.valueType.properties)
- }
- if (['file'].includes(val.valueType.type) && !val.valueType.fileType) {
- return Promise.reject(new Error('请选择文件类型'))
- }
- return Promise.resolve();
-}
-
// const rules = ref({
// type: [
// metadataStore.model.type !== 'functions' ? { required: true, message: `请选择${props.title}` } : {},
diff --git a/src/views/device/components/Metadata/Base/Edit/validator.ts b/src/views/device/components/Metadata/Base/Edit/validator.ts
new file mode 100644
index 00000000..15724c6b
--- /dev/null
+++ b/src/views/device/components/Metadata/Base/Edit/validator.ts
@@ -0,0 +1,60 @@
+import { Rule } from "ant-design-vue/es/form";
+
+export const validateEnum = async (_rule: Rule, val: Record[]) => {
+ if (val.length === 0) return Promise.reject(new Error('请配置枚举项'));
+ const flag = val.every((item) => {
+ return item.value && item.text;
+ });
+ if (!flag) {
+ return Promise.reject(new Error('请配置枚举项'));
+ }
+ return Promise.resolve();
+}
+
+export const validateArray = async (_rule: Rule, val: Record) => {
+ if (!val) return Promise.reject(new Error(`请输入元素配置`));
+ await validateValueType(_rule, val)
+ return Promise.resolve();
+}
+
+export const validateJson = async (_rule: Rule, val: Record[], title = '配置参数') => {
+ if (!val || val.length === 0) {
+ return Promise.reject(new Error(`请输入${title}`));
+ }
+ for (let item of val) {
+ if (!item) return Promise.reject(new Error(`请输入${title}`));
+ await validateIdName(_rule, item)
+ await validateValueType(_rule, item.valueType)
+ }
+ return Promise.resolve();
+}
+
+export const validateIdName = async (_rule: Rule, val: Record) => {
+ if (!val.id) {
+ return Promise.reject(new Error('请输入标识'))
+ }
+ if (!val.name) {
+ return Promise.reject(new Error('请输入名称'))
+ }
+}
+
+export const validateValueType = async (_rule: Rule, val: Record, title = '数据类型') => {
+ console.log(val)
+ if (!val) return Promise.reject(new Error('请输入元素配置'));
+ if (!val?.type) {
+ return Promise.reject(new Error(`请选择${title}`))
+ }
+ if (['enum'].includes(val.type)) {
+ await validateEnum(_rule, val.elements)
+ }
+ if (['array'].includes(val.type)) {
+ await validateArray(_rule, val.elementType)
+ }
+ if (['object'].includes(val.type)) {
+ await validateJson(_rule, val.properties)
+ }
+ if (['file'].includes(val.type) && !val.fileType) {
+ return Promise.reject(new Error('请选择文件类型'))
+ }
+ return Promise.resolve();
+}
\ No newline at end of file
diff --git a/src/views/device/components/Metadata/Base/index.vue b/src/views/device/components/Metadata/Base/index.vue
index 35948645..cca9dfe4 100644
--- a/src/views/device/components/Metadata/Base/index.vue
+++ b/src/views/device/components/Metadata/Base/index.vue
@@ -38,22 +38,20 @@
-
-
+ }" :tooltip="{
+ title: '删除',
+}">
@@ -69,13 +67,9 @@ import { useProductStore } from '@/store/product'
import { useMetadataStore } from '@/store/metadata'
import PermissionButton from '@/components/PermissionButton/index.vue'
import { TablePaginationConfig, message } from 'ant-design-vue/es'
-import { SystemConst } from '@/utils/consts'
-import { Store } from 'jetlinks-store'
import { asyncUpdateMetadata, removeMetadata } from '../metadata'
import { detail } from '@/api/device/instance'
import Edit from './Edit/index.vue'
-// import { detail } from '@/api/device/instance'
-// import { detail as productDetail } from '@/api/device/product'
interface Props {
type: MetadataType;
target: 'product' | 'device';
@@ -134,10 +128,6 @@ const handleSearch = (searchValue: string) => {
}
}
-onMounted(() => {
-
-})
-
const refreshMetadata = () => {
loading.value = true
// const res = target === 'product'
@@ -188,11 +178,18 @@ const handleEditClick = (record: MetadataItem) => {
}
const resetMetadata = async () => {
+ // const { id } = route.params
+ // const resp = await detail(id as string);
+ // if (resp.status === 200) {
+ // instanceStore.setCurrent(resp?.result || []);
+ // }
const { id } = route.params
- const resp = await detail(id as string);
- if (resp.status === 200) {
- instanceStore.setCurrent(resp?.result || []);
+ if (target === 'device') {
+ instanceStore.refresh(id as string)
+ } else {
+ productStore.refresh(id as string)
}
+ metadataStore.set('importMetadata', true)
};
const removeItem = async (record: MetadataItem) => {
@@ -203,7 +200,7 @@ const removeItem = async (record: MetadataItem) => {
const result = await asyncUpdateMetadata(target, _currentData);
if (result.status === 200) {
message.success('操作成功!');
- Store.set(SystemConst.REFRESH_METADATA_TABLE, true);
+ // Store.set(SystemConst.REFRESH_METADATA_TABLE, true);
metadataStore.model.edit = false;
metadataStore.model.item = {};
resetMetadata();