diff --git a/README.md b/README.md
index e027949..c605b8c 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+启动项目pnpm run dev:antd
+
diff --git a/apps/web-antd/src/views/device/product/detail/components/EventDrawer.vue b/apps/web-antd/src/views/device/product/detail/components/EventDrawer.vue
index 36d65a2..7aa1054 100644
--- a/apps/web-antd/src/views/device/product/detail/components/EventDrawer.vue
+++ b/apps/web-antd/src/views/device/product/detail/components/EventDrawer.vue
@@ -118,6 +118,7 @@ const formRules = {
},
],
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
+ sort: [{ required: true, message: '请输入排序', trigger: 'blur' }],
// 'valueParams.dataType': [
// { required: true, message: '请选择数据类型', trigger: 'blur' },
// ],
diff --git a/apps/web-antd/src/views/device/product/detail/components/FunctionDrawer.vue b/apps/web-antd/src/views/device/product/detail/components/FunctionDrawer.vue
index 9c08229..2b9645c 100644
--- a/apps/web-antd/src/views/device/product/detail/components/FunctionDrawer.vue
+++ b/apps/web-antd/src/views/device/product/detail/components/FunctionDrawer.vue
@@ -155,6 +155,7 @@ const formRules = {
},
],
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
+ sort: [{ required: true, message: '请输入排序', trigger: 'blur' }],
};
// 抽屉标题
diff --git a/apps/web-antd/src/views/device/product/detail/components/Metadata.vue b/apps/web-antd/src/views/device/product/detail/components/Metadata.vue
index 2dc6822..55ffc73 100644
--- a/apps/web-antd/src/views/device/product/detail/components/Metadata.vue
+++ b/apps/web-antd/src/views/device/product/detail/components/Metadata.vue
@@ -38,6 +38,7 @@ const currentMetadata = ref({
properties: [],
functions: [],
events: [],
+ propertyGroups: [], // 新增属性分组
});
// 标签页切换
@@ -97,6 +98,7 @@ const loadMetadata = async () => {
properties: [],
functions: [],
events: [],
+ propertyGroups: [], // 新增属性分组
};
try {
currentMetadata.value = props.productInfo.metadata
@@ -212,6 +214,7 @@ const handleSave = async () => {
metadata.properties.sort((a: any, b: any) => a.sort - b.sort);
metadata.functions.sort((a: any, b: any) => a.sort - b.sort);
metadata.events.sort((a: any, b: any) => a.sort - b.sort);
+ metadata.propertyGroups.sort((a: any, b: any) => a.sort - b.sort); // 新增属性分组排序
await productUpdateById(props.productInfo.id, {
id: props.productInfo.id,
metadata: JSON.stringify(metadata),
@@ -244,6 +247,11 @@ const handleMetadataChange = (data: any) => {
currentMetadata.value.properties = data;
break;
}
+ case 'propertyGroups': {
+ // 新增属性分组处理
+ currentMetadata.value.propertyGroups = data;
+ break;
+ }
// No default
}
};
@@ -328,6 +336,16 @@ loadMetadata();
@refresh="loadMetadata"
/>
+
+
+
();
const emit = defineEmits<{
@@ -67,6 +69,18 @@ const columns = computed(() => {
fixed: 'right',
},
];
+
+ // 属性分组特殊列
+ if (props.type === 'propertyGroups') {
+ baseColumns.splice(3, 0, {
+ title: '属性数',
+ dataIndex: 'properties',
+ key: 'count',
+ width: 100,
+ customRender: ({ record }: any) => record.properties?.length || 0,
+ });
+ }
+
// 功能定义特殊列
if (props.type === 'properties') {
baseColumns.splice(
@@ -129,6 +143,7 @@ const getTypeLabel = () => {
functions: '功能',
events: '事件',
tags: '标签',
+ propertyGroups: '分组',
};
return labels[props.type];
};
@@ -319,6 +334,16 @@ onMounted(() => {
:data="formData"
@save="handleSave"
/>
+
+
+
diff --git a/apps/web-antd/src/views/device/product/detail/components/PropertyDrawer.vue b/apps/web-antd/src/views/device/product/detail/components/PropertyDrawer.vue
index f8332a9..8233532 100644
--- a/apps/web-antd/src/views/device/product/detail/components/PropertyDrawer.vue
+++ b/apps/web-antd/src/views/device/product/detail/components/PropertyDrawer.vue
@@ -116,6 +116,7 @@ const formRules = {
},
],
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
+ sort: [{ required: true, message: '请输入排序', trigger: 'blur' }],
// 'valueParams.dataType': [
// { required: true, message: '请选择数据类型', trigger: 'blur' },
// ],
diff --git a/apps/web-antd/src/views/device/product/detail/components/PropertyGroupDrawer.vue b/apps/web-antd/src/views/device/product/detail/components/PropertyGroupDrawer.vue
new file mode 100644
index 0000000..8bc0e85
--- /dev/null
+++ b/apps/web-antd/src/views/device/product/detail/components/PropertyGroupDrawer.vue
@@ -0,0 +1,304 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/web-antd/src/views/device/product/detail/components/PropertySelectionModal.vue b/apps/web-antd/src/views/device/product/detail/components/PropertySelectionModal.vue
new file mode 100644
index 0000000..5fef062
--- /dev/null
+++ b/apps/web-antd/src/views/device/product/detail/components/PropertySelectionModal.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+ 标识/名称:
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ getDataTypeLabel(record.valueParams?.dataType || record.dataType)
+ }}
+
+
+
+
+ {{
+ getReadWriteTypeLabel(
+ record.expands?.type || record.readWriteType,
+ )
+ }}
+
+
+
+ {{ record.description || '-' }}
+
+
+
+
+
+
+
+
+
+