diff --git a/apps/web-antd/src/api-client/schemas.gen.ts b/apps/web-antd/src/api-client/schemas.gen.ts
index 8588a90..b248a72 100644
--- a/apps/web-antd/src/api-client/schemas.gen.ts
+++ b/apps/web-antd/src/api-client/schemas.gen.ts
@@ -3362,11 +3362,11 @@ export const IoTDBDynamicObjectPagedResultDtoSchema = {
} as const;
export const IoTPlatformTypeEnumSchema = {
- enum: [0, 1, 2],
+ enum: [1, 2],
type: 'integer',
description: '物联网平台类型枚举',
format: 'int32',
- '说明:': '无=0,电信CTWing=1,移动OneNET=2'
+ '说明:': '电信CTWing=1,移动OneNET=2'
} as const;
export const LanguageInfoSchema = {
@@ -4429,6 +4429,11 @@ export const OneNETProductInfoDtoSchema = {
description: 'OneNET账户Id',
nullable: true
},
+ oneNETAccountName: {
+ type: 'string',
+ description: 'OneNET账户',
+ nullable: true
+ },
ioTPlatformProductId: {
type: 'string',
description: '物联网平台对应的产品Id',
@@ -4449,10 +4454,6 @@ export const OneNETProductInfoDtoSchema = {
description: '设备物模型文件管理地址',
nullable: true
},
- isEncrypted: {
- type: 'boolean',
- description: '通信是否加密'
- },
isEnabled: {
type: 'boolean',
description: '是否启用'
@@ -4655,32 +4656,38 @@ export const OneNetAccountModifyInputSchema = {
} as const;
export const OneNetProductInfoInsertInputSchema = {
+ required: ['communicationAddress', 'ioTPlatformProductId', 'oneNETAccountId', 'productAccesskey'],
type: 'object',
properties: {
oneNETAccountId: {
+ minLength: 1,
type: 'string',
- description: 'OneNET 账号ID',
- nullable: true
+ description: 'OneNET 账号ID'
},
ioTPlatformProductId: {
+ minLength: 1,
type: 'string',
- description: '物联网平台对应的产品Id',
- nullable: true
+ description: '物联网平台对应的产品Id'
},
productAccesskey: {
+ minLength: 1,
type: 'string',
- description: '产品访问密钥',
- nullable: true
+ description: '产品访问密钥'
},
communicationAddress: {
+ minLength: 1,
type: 'string',
- description: '通讯服务地址',
- nullable: true
+ description: '通讯服务地址'
},
communicationAddressTLS: {
type: 'string',
description: 'TLS通讯服务地址',
nullable: true
+ },
+ deviceThingModelUrl: {
+ type: 'string',
+ description: '物模型文件链接',
+ nullable: true
}
},
additionalProperties: false
@@ -4733,11 +4740,43 @@ export const OneNetProductInfoListInputSchema = {
} as const;
export const OneNetProductInfoModifyInputSchema = {
+ required: ['communicationAddress', 'ioTPlatformProductId', 'oneNETAccountId', 'productAccesskey'],
type: 'object',
properties: {
id: {
type: 'string',
+ description: '产品数据ID',
format: 'uuid'
+ },
+ oneNETAccountId: {
+ minLength: 1,
+ type: 'string',
+ description: 'OneNET 账号ID'
+ },
+ ioTPlatformProductId: {
+ minLength: 1,
+ type: 'string',
+ description: '物联网平台对应的产品Id'
+ },
+ productAccesskey: {
+ minLength: 1,
+ type: 'string',
+ description: '产品访问密钥'
+ },
+ communicationAddress: {
+ minLength: 1,
+ type: 'string',
+ description: '通讯服务地址'
+ },
+ communicationAddressTLS: {
+ type: 'string',
+ description: 'TLS通讯服务地址',
+ nullable: true
+ },
+ deviceThingModelUrl: {
+ type: 'string',
+ description: '物模型文件链接',
+ nullable: true
}
},
additionalProperties: false,
diff --git a/apps/web-antd/src/api-client/types.gen.ts b/apps/web-antd/src/api-client/types.gen.ts
index ca67f5d..2fe0937 100644
--- a/apps/web-antd/src/api-client/types.gen.ts
+++ b/apps/web-antd/src/api-client/types.gen.ts
@@ -1380,7 +1380,7 @@ export type IoTDBDynamicObjectPagedResultDto = {
/**
* 物联网平台类型枚举
*/
-export type IoTPlatformTypeEnum = 0 | 1 | 2;
+export type IoTPlatformTypeEnum = 1 | 2;
export type IStringValueType = {
readonly name?: (string) | null;
@@ -2107,6 +2107,10 @@ export type OneNETProductInfoDto = {
* OneNET账户Id
*/
oneNETAccountId?: (string) | null;
+ /**
+ * OneNET账户
+ */
+ oneNETAccountName?: (string) | null;
/**
* 物联网平台对应的产品Id
*/
@@ -2123,10 +2127,6 @@ export type OneNETProductInfoDto = {
* 设备物模型文件管理地址
*/
deviceThingModelUrl?: (string) | null;
- /**
- * 通信是否加密
- */
- isEncrypted?: boolean;
/**
* 是否启用
*/
@@ -2200,23 +2200,27 @@ export type OneNetProductInfoInsertInput = {
/**
* OneNET 账号ID
*/
- oneNETAccountId?: (string) | null;
+ oneNETAccountId: string;
/**
* 物联网平台对应的产品Id
*/
- ioTPlatformProductId?: (string) | null;
+ ioTPlatformProductId: string;
/**
* 产品访问密钥
*/
- productAccesskey?: (string) | null;
+ productAccesskey: string;
/**
* 通讯服务地址
*/
- communicationAddress?: (string) | null;
+ communicationAddress: string;
/**
* TLS通讯服务地址
*/
communicationAddressTLS?: (string) | null;
+ /**
+ * 物模型文件链接
+ */
+ deviceThingModelUrl?: (string) | null;
};
export type OneNetProductInfoListInput = {
@@ -2257,7 +2261,34 @@ export type OneNetProductInfoListInput = {
* 修改OneNET产品
*/
export type OneNetProductInfoModifyInput = {
+ /**
+ * 产品数据ID
+ */
id?: string;
+ /**
+ * OneNET 账号ID
+ */
+ oneNETAccountId: string;
+ /**
+ * 物联网平台对应的产品Id
+ */
+ ioTPlatformProductId: string;
+ /**
+ * 产品访问密钥
+ */
+ productAccesskey: string;
+ /**
+ * 通讯服务地址
+ */
+ communicationAddress: string;
+ /**
+ * TLS通讯服务地址
+ */
+ communicationAddressTLS?: (string) | null;
+ /**
+ * 物模型文件链接
+ */
+ deviceThingModelUrl?: (string) | null;
};
/**
diff --git a/apps/web-antd/src/locales/langs/en-US/abp.json b/apps/web-antd/src/locales/langs/en-US/abp.json
index ffcd85e..4333fac 100644
--- a/apps/web-antd/src/locales/langs/en-US/abp.json
+++ b/apps/web-antd/src/locales/langs/en-US/abp.json
@@ -269,12 +269,13 @@
"ProductCount": "ProductCount",
"OneNETAccountId": "OneNETAccountId",
"OneNETProductId": "OneNETProductId",
- "ProductKey": "ProductKey",
- "ProductSecret": "ProductSecret",
"IoTPlatformProductId": "IoTPlatformProductId",
"ProductName": "ProductName",
"ProductAccesskey": "ProductAccesskey",
"IsEncrypted": "IsEncrypted",
- "BelongingProductName": "BelongingProductName"
+ "BelongingProductName": "Belonging ProductName",
+ "CommunicationAddress": "Communication Address",
+ "CommunicationAddressTLS": "TLS Communication Address",
+ "DeviceThingModelUrl": "DeviceThingModelUrl"
}
}
diff --git a/apps/web-antd/src/locales/langs/zh-CN/abp.json b/apps/web-antd/src/locales/langs/zh-CN/abp.json
index d38d59d..87c00b0 100644
--- a/apps/web-antd/src/locales/langs/zh-CN/abp.json
+++ b/apps/web-antd/src/locales/langs/zh-CN/abp.json
@@ -271,12 +271,13 @@
"ProductCount": "产品数量",
"OneNETAccountId": "OneNET账户Id",
"OneNETProductId": "OneNET产品Id",
- "ProductKey": "产品密钥",
- "ProductSecret": "产品密钥",
"IoTPlatformProductId": "物联网平台对应的产品Id",
"ProductName": "产品名称",
- "ProductAccesskey": "产品访问密钥",
+ "ProductAccesskey": "产品密钥",
"IsEncrypted": "是否加密",
- "BelongingProductName": "所属产品"
+ "BelongingProductName": "所属产品",
+ "CommunicationAddress": "通讯服务地址",
+ "CommunicationAddressTLS": "TLS通讯服务地址",
+ "DeviceThingModelUrl": "物模型文件链接"
}
}
diff --git a/apps/web-antd/src/views/onenetmanagement/privateProduct/schema.ts b/apps/web-antd/src/views/onenetmanagement/privateProduct/schema.ts
index 945301b..865ef64 100644
--- a/apps/web-antd/src/views/onenetmanagement/privateProduct/schema.ts
+++ b/apps/web-antd/src/views/onenetmanagement/privateProduct/schema.ts
@@ -4,8 +4,8 @@ import { computed } from 'vue';
import { z } from '@vben/common-ui';
-import { $t } from '#/locales';
import { postOneNetAccountListAsync } from '#/api-client';
+import { $t } from '#/locales';
export const querySchema = computed(() => [
{
@@ -18,7 +18,12 @@ export const querySchema = computed(() => [
export const tableSchema: any = computed((): VxeGridProps['columns'] => [
{ title: $t('common.seq'), type: 'seq', width: 50 },
{
- field: 'oneNETProductId',
+ field: 'oneNETAccountName',
+ title: $t('abp.OneNETManagement.BelongingAccountName'),
+ minWidth: '150',
+ },
+ {
+ field: 'ioTPlatformProductId',
title: $t('abp.OneNETManagement.OneNETProductId'),
minWidth: '150',
},
@@ -28,22 +33,22 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
minWidth: '150',
},
{
- field: 'productKey',
- title: $t('abp.OneNETManagement.ProductKey'),
+ field: 'productAccesskey',
+ title: $t('abp.OneNETManagement.ProductAccesskey'),
minWidth: '150',
},
{
- field: 'productSecret',
- title: $t('abp.OneNETManagement.ProductSecret'),
+ field: 'communicationAddress',
+ title: $t('abp.OneNETManagement.CommunicationAddress'),
minWidth: '150',
},
{
- field: 'accountName',
- title: $t('abp.OneNETManagement.AccountName'),
+ field: 'communicationAddressTLS',
+ title: $t('abp.OneNETManagement.CommunicationAddressTLS'),
minWidth: '150',
},
{
- field: 'enabled',
+ field: 'isEnabled',
title: $t('common.isEnable'),
minWidth: '150',
slots: { default: 'isEnable' },
@@ -74,32 +79,25 @@ export const addProductFormSchema: any = computed(() => [
valueField: 'oneNETAccountId',
immediate: true,
afterFetch: (res: any) => {
- console.log('ApiSelect afterFetch res:', res);
-
// 如果是 Axios 响应对象,提取 data
if (res && res.data) {
- console.log('提取 res.data:', res.data);
const data = res.data;
-
+
// 确保返回的是数组格式
if (Array.isArray(data)) {
- console.log('返回数组,长度:', data.length);
return data;
}
// 如果是包装在 items 中的,提取出来
if (data && Array.isArray(data.items)) {
- console.log('返回items数组,长度:', data.items.length);
return data.items;
}
// 如果是包装在 data 中的,提取出来
if (data && Array.isArray(data.data)) {
- console.log('返回data数组,长度:', data.data.length);
return data.data;
}
}
-
+
// 如果都不是,返回空数组
- console.log('没有找到数组数据,返回空数组');
return [];
},
placeholder: `${$t('common.pleaseSelect')}${$t('abp.OneNETManagement.BelongingAccountName')}`,
@@ -110,7 +108,7 @@ export const addProductFormSchema: any = computed(() => [
},
{
component: 'Input',
- fieldName: 'oneNETProductId',
+ fieldName: 'IoTPlatformProductId',
label: $t('abp.OneNETManagement.OneNETProductId'),
rules: z.string().min(1, {
message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.OneNETProductId')}`,
@@ -118,73 +116,43 @@ export const addProductFormSchema: any = computed(() => [
},
{
component: 'Input',
- fieldName: 'productName',
- label: $t('abp.OneNETManagement.ProductName'),
+ fieldName: 'productAccesskey',
+ label: $t('abp.OneNETManagement.ProductAccesskey'),
rules: z.string().min(1, {
- message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductName')}`,
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductAccesskey')}`,
}),
},
{
component: 'Input',
- fieldName: 'productKey',
- label: $t('abp.OneNETManagement.ProductKey'),
+ fieldName: 'communicationAddress',
+ label: $t('abp.OneNETManagement.CommunicationAddress'),
rules: z.string().min(1, {
- message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductKey')}`,
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.CommunicationAddress')}`,
}),
},
{
component: 'Input',
- fieldName: 'productSecret',
- label: $t('abp.OneNETManagement.ProductSecret'),
+ fieldName: 'CommunicationAddressTLS',
+ label: $t('abp.OneNETManagement.CommunicationAddressTLS'),
rules: z.string().min(1, {
- message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductSecret')}`,
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.CommunicationAddressTLS')}`,
}),
},
{
- component: 'Switch',
- componentProps: {
- class: 'w-auto',
- },
- fieldName: 'enabled',
- label: $t('common.isEnable'),
+ component: 'Input',
+ fieldName: 'DeviceThingModelUrl',
+ label: $t('abp.OneNETManagement.DeviceThingModelUrl'),
+ rules: z.string().min(1, {
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.DeviceThingModelUrl')}`,
+ }),
},
]);
export const editProductFormSchemaEdit: any = computed(() => [
- {
- component: 'Input',
- fieldName: 'oneNETProductId',
- label: $t('abp.OneNETManagement.OneNETProductId'),
- disabled: true,
- },
- {
- component: 'Input',
- fieldName: 'productName',
- label: $t('abp.OneNETManagement.ProductName'),
- rules: z.string().min(1, {
- message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductName')}`,
- }),
- },
- {
- component: 'Input',
- fieldName: 'productKey',
- label: $t('abp.OneNETManagement.ProductKey'),
- rules: z.string().min(1, {
- message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductKey')}`,
- }),
- },
- {
- component: 'Input',
- fieldName: 'productSecret',
- label: $t('abp.OneNETManagement.ProductSecret'),
- rules: z.string().min(1, {
- message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductSecret')}`,
- }),
- },
{
component: 'ApiSelect',
- fieldName: 'accountName',
- label: $t('abp.OneNETManagement.AccountName'),
+ fieldName: 'oneNETAccountId',
+ label: $t('abp.OneNETManagement.BelongingAccountName'),
componentProps: {
api: postOneNetAccountListAsync,
params: {
@@ -197,46 +165,71 @@ export const editProductFormSchemaEdit: any = computed(() => [
valueField: 'oneNETAccountId',
immediate: true,
afterFetch: (res: any) => {
- console.log('ApiSelect afterFetch res:', res);
-
// 如果是 Axios 响应对象,提取 data
if (res && res.data) {
- console.log('提取 res.data:', res.data);
const data = res.data;
-
+
// 确保返回的是数组格式
if (Array.isArray(data)) {
- console.log('返回数组,长度:', data.length);
return data;
}
// 如果是包装在 items 中的,提取出来
if (data && Array.isArray(data.items)) {
- console.log('返回items数组,长度:', data.items.length);
return data.items;
}
// 如果是包装在 data 中的,提取出来
if (data && Array.isArray(data.data)) {
- console.log('返回data数组,长度:', data.data.length);
return data.data;
}
}
-
+
// 如果都不是,返回空数组
- console.log('没有找到数组数据,返回空数组');
return [];
},
- placeholder: `${$t('common.pleaseSelect')}${$t('abp.OneNETManagement.AccountName')}`,
+ placeholder: `${$t('common.pleaseSelect')}${$t('abp.OneNETManagement.BelongingAccountName')}`,
},
rules: z.string().min(1, {
- message: `${$t('common.pleaseSelect')}${$t('abp.OneNETManagement.AccountName')}`,
+ message: `${$t('common.pleaseSelect')}${$t('abp.OneNETManagement.BelongingAccountName')}`,
}),
},
{
- component: 'Switch',
- componentProps: {
- class: 'w-auto',
- },
- fieldName: 'enabled',
- label: $t('common.isEnable'),
+ component: 'Input',
+ fieldName: 'IoTPlatformProductId',
+ label: $t('abp.OneNETManagement.OneNETProductId'),
+ rules: z.string().min(1, {
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.OneNETProductId')}`,
+ }),
+ },
+ {
+ component: 'Input',
+ fieldName: 'productAccesskey',
+ label: $t('abp.OneNETManagement.ProductAccesskey'),
+ rules: z.string().min(1, {
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.ProductAccesskey')}`,
+ }),
+ },
+ {
+ component: 'Input',
+ fieldName: 'communicationAddress',
+ label: $t('abp.OneNETManagement.CommunicationAddress'),
+ rules: z.string().min(1, {
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.CommunicationAddress')}`,
+ }),
+ },
+ {
+ component: 'Input',
+ fieldName: 'CommunicationAddressTLS',
+ label: $t('abp.OneNETManagement.CommunicationAddressTLS'),
+ rules: z.string().min(1, {
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.CommunicationAddressTLS')}`,
+ }),
+ },
+ {
+ component: 'Input',
+ fieldName: 'DeviceThingModelUrl',
+ label: $t('abp.OneNETManagement.DeviceThingModelUrl'),
+ rules: z.string().min(1, {
+ message: `${$t('common.pleaseInput')}${$t('common.info')}${$t('abp.OneNETManagement.DeviceThingModelUrl')}`,
+ }),
},
]);
diff --git a/apps/web-antd/src/views/system/abpfiles/AddModal.vue b/apps/web-antd/src/views/system/abpfiles/AddModal.vue
index cd2b4e1..b71aa8f 100644
--- a/apps/web-antd/src/views/system/abpfiles/AddModal.vue
+++ b/apps/web-antd/src/views/system/abpfiles/AddModal.vue
@@ -9,9 +9,12 @@ import { $t } from '#/locales';
import { addFormSchema } from './schema';
import { postFilesUpload } from '#/api-client/index';
+import { useUserStore } from '@vben/stores';
const emit = defineEmits(['reload']);
+const userStore = useUserStore();
+
// 创建上传图标
const UploadIcon = createIconifyIcon('mdi:upload');
const FolderIcon = createIconifyIcon('mdi:folder');
@@ -144,51 +147,39 @@ const handleUpload = async () => {
uploading.value = true;
try {
- // 获取表单数据
- const formValues = await formApi.getValues();
- console.log('Form values:', formValues);
console.log('File list:', fileList.value);
- // 创建一个FormData对象,包含所有文件
- const uploadFormData = new FormData();
+ // 提取文件对象
+ const files = fileList.value
+ .map(fileInfo => fileInfo.originFileObj)
+ .filter(file => file !== null && file !== undefined);
- // 添加所有文件到FormData
- fileList.value.forEach((fileInfo, index) => {
- if (fileInfo.originFileObj) {
- console.log(`Adding file ${index}:`, fileInfo.name, fileInfo.originFileObj);
- uploadFormData.append('files', fileInfo.originFileObj);
- }
- });
+ console.log('Extracted files:', files);
- // 添加表单其他数据(如果有的话)
- if (formValues) {
- Object.keys(formValues).forEach(key => {
- if (formValues[key] !== undefined && formValues[key] !== null) {
- console.log(`Adding form field ${key}:`, formValues[key]);
- uploadFormData.append(key, formValues[key]);
- }
- });
- }
-
- // 打印FormData内容(调试用)
- for (let [key, value] of uploadFormData.entries()) {
- console.log(`FormData entry: ${key} =`, value);
- }
-
- // 上传文件
+ // 上传文件 - 使用正确的API格式
+ console.log('Sending request to /Files/Upload...');
const result = await postFilesUpload({
- body: uploadFormData as any,
+ body: {
+ files: files
+ },
+ headers: {
+ 'Authorization': `Bearer ${userStore.userInfo?.token}`,
+ },
});
console.log('Upload result:', result);
+ console.log('Response status:', result.status);
+ console.log('Response data:', result.data);
+ console.log('Response headers:', result.headers);
// 检查上传结果
if (result.status === 204 || result.status === 200) {
message.success(`文件上传成功!共上传 ${fileList.value.length} 个文件`);
+ console.log('Emitting reload event...');
emit('reload');
modalApi.close();
} else {
- message.error('文件上传失败,请重试');
+ message.error(`文件上传失败,状态码: ${result.status}`);
}
} catch (error) {
console.error('Upload error:', error);
diff --git a/apps/web-antd/src/views/system/abpfiles/index.vue b/apps/web-antd/src/views/system/abpfiles/index.vue
index 4a38edf..967d570 100644
--- a/apps/web-antd/src/views/system/abpfiles/index.vue
+++ b/apps/web-antd/src/views/system/abpfiles/index.vue
@@ -73,6 +73,11 @@ const [AddVbenModal, addModalApi] = useVbenModal({
connectedComponent: AddModal,
});
+const handleReload = () => {
+ console.log('Reloading file list...');
+ gridApi.reload();
+};
+
const handleAdd = () => {
addModalApi.open();
};
@@ -144,7 +149,7 @@ const handleDown = async (row: any) => {
/>
-
+
diff --git a/apps/web-antd/src/views/system/abpfiles/schema.ts b/apps/web-antd/src/views/system/abpfiles/schema.ts
index 4e52915..7d6bca5 100644
--- a/apps/web-antd/src/views/system/abpfiles/schema.ts
+++ b/apps/web-antd/src/views/system/abpfiles/schema.ts
@@ -69,13 +69,5 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
]);
export const addFormSchema = computed(() => [
- // 文件上传现在在AddModal中处理
- {
- component: 'Input',
- fieldName: 'note',
- label: $t('common.note'),
- componentProps: {
- placeholder: '请输入备注信息',
- },
- },
+ // 文件上传现在在AddModal中处理,不需要表单字段
]);