Skip to content

Commit be7d391

Browse files
committed
物模型
1 parent c3d70f8 commit be7d391

File tree

7 files changed

+262
-164
lines changed

7 files changed

+262
-164
lines changed

src/api/tb/thingsModel.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import { BasicQuery, Page } from '../model/baseModel';
2+
import { EntityId } from '/#/store';
3+
import { EntityType } from '/@/enums/entityTypeEnum';
4+
import { DataType, FunctionType } from '/@/enums/thingsModelEnum';
5+
import { defHttp } from '/@/utils/http/axios';
6+
7+
export interface Function extends Recordable {
8+
identifier?: string;
9+
name?: string;
10+
type?: FunctionType;
11+
deviceProfileId?: EntityId<EntityType.DEVICE_PROFILE>;
12+
tenantId: EntityId<EntityType.TENANT>;
13+
description?: string;
14+
}
15+
16+
export interface Property extends Function {
17+
type: FunctionType.property;
18+
accessMode?: 'rw' | 'r';
19+
dataType?: {
20+
type?: DataType;
21+
specs?: {
22+
min?: number;
23+
max?: number;
24+
step?: number;
25+
unit?: number;
26+
unitName?: string;
27+
length?: number;
28+
};
29+
};
30+
}
31+
32+
export interface Service extends Function {
33+
type: FunctionType.service;
34+
callType?: 'async' | 'sync';
35+
outputData: Property[];
36+
inputData: Property[];
37+
}
38+
39+
export interface Event extends Function {
40+
type: FunctionType.event;
41+
outputData: Property[];
42+
}
43+
44+
export function saveFunction(data?: Function | any) {
45+
if (data.type == FunctionType.service) {
46+
return saveService(data);
47+
} else if (data.type == FunctionType.event) {
48+
return saveEvent(data);
49+
} else if (data.type == FunctionType.property) {
50+
return saveProperty(data);
51+
}
52+
}
53+
54+
export function saveProperty(data?: Property | any) {
55+
return defHttp.postJson<Property>({
56+
url: '/api/thingsModel/property',
57+
data,
58+
});
59+
}
60+
61+
export function saveService(data?: Service | any) {
62+
return defHttp.postJson<Service>({
63+
url: '/api/thingsModel/service',
64+
data,
65+
});
66+
}
67+
export function saveEvent(data?: Event | any) {
68+
return defHttp.postJson<Event>({
69+
url: '/api/thingsModel/event',
70+
data,
71+
});
72+
}
73+
74+
export function getFunction(deviceProfileId: string, identifier: string) {
75+
return defHttp.get<Function>({
76+
url: `/api/thingsModel/${deviceProfileId}/${identifier}`,
77+
});
78+
}
79+
80+
export function deleteFunction(deviceProfileId: string, identifier: string) {
81+
return defHttp.delete<void>({
82+
url: `/api/thingsModel/${deviceProfileId}/${identifier}`,
83+
});
84+
}
85+
86+
export function functionList(
87+
deviceProfileId: string,
88+
params: {
89+
pageSize: number;
90+
page: number;
91+
textSearch?: string;
92+
sortProperty?: string;
93+
sortOrder?: 'ASC' | 'DESC';
94+
type?: FunctionType;
95+
},
96+
) {
97+
return defHttp.get<Page<Function>>({
98+
url: `/api/thingsModel/${deviceProfileId}/functions`,
99+
params,
100+
});
101+
}

src/enums/thingsModelEnum.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ export enum DataType {
77
text = 'text',
88
date = 'date',
99
json = 'json',
10-
array = 'array',
1110
}
1211

1312
export enum FunctionType {
@@ -25,7 +24,6 @@ export const DATA_TYPE_OPTIONS = [
2524
{ value: DataType.text, label: 'text (字符串)' },
2625
{ value: DataType.date, label: 'date (时间型)' },
2726
{ value: DataType.json, label: 'json (复合型)' },
28-
{ value: DataType.array, label: 'array (数组)' },
2927
];
3028

3129
export const FUNCTION_TYPE_OPTIONS = [

src/views/tb/device/detail.vue

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,21 @@
9191
<template #tab
9292
><span> <Icon :icon="'ant-design:line-chart-outlined'" /> 数据 </span>
9393
</template>
94-
<Telemetry v-if="tabActiveKey == 'TELEMETRY'" :entityType="EntityType.DEVICE" :entityId="record?.id?.id" />
94+
<Telemetry
95+
v-if="tabActiveKey == 'TELEMETRY'"
96+
:entityType="EntityType.DEVICE"
97+
:entityId="record?.id?.id"
98+
/>
9599
</TabPane>
96100
<TabPane key="TGINGMODEL">
97101
<template #tab>
98102
<span> <Icon :icon="'ant-design:project-outlined'" /> 物模型 </span>
99103
</template>
100-
<ThingModelForm ref="thingsModelFrom" :readOnly="true" />
104+
<ThingModelList
105+
ref="thingsModelFrom"
106+
:deviceProfileId="record.deviceProfileId?.id"
107+
:readOnly="true"
108+
/>
101109
</TabPane>
102110
<TabPane key="TOPIC">
103111
<template #tab
@@ -152,15 +160,15 @@
152160
import { useUserStore } from '/@/store/modules/user';
153161
import { Authority } from '/@/enums/authorityEnum';
154162
import { CredentialsType } from '/@/enums/deviceEnum';
163+
import { EntityType } from '/@/enums/entityTypeEnum';
155164
import Alarm from '/@/views/tb/alarm/list.vue';
156165
import Telemetry from '/@/views/tb/telemetry/index.vue';
157166
import AuditLog from '/@/views/tb/auditLog/list.vue';
158167
import Relation from '/@/views/tb/relation/list.vue';
159168
import Event from '/@/views/tb/event/index.vue';
160169
import DeviceAPI from '/@/views/tb/device/deviceApi.vue';
161-
import ThingModelForm from '/@/views/tb/product/thingModel/thingModelForm.vue';
170+
import ThingModelList from '/@/views/tb/product/thingModel/thingModelList.vue';
162171
163-
import { EntityType } from '/@/enums/entityTypeEnum';
164172
165173
const userStore = useUserStore();
166174
const { hasPermission } = usePermission();
@@ -252,18 +260,6 @@
252260
setDescProps({ data: {} });
253261
}
254262
255-
watch(
256-
() => tabActiveKey.value,
257-
() => {
258-
if (tabActiveKey.value == 'TGINGMODEL') {
259-
nextTick(() => {
260-
if (thingsModelFrom.value != null) {
261-
thingsModelFrom.value.setFieldsValue(record.value?.deviceData?.thingModelDefine || {});
262-
}
263-
});
264-
}}
265-
);
266-
267263
function handleCopyDeviceId() {
268264
copyToClipboard(record.value.id.id, '复制设备ID成功!');
269265
}

src/views/tb/product/detail.vue

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@
7575
</div>
7676
</TabPane>
7777
<TabPane key="TGINGMODEL">
78-
<template #tab
79-
><span> <Icon :icon="'ant-design:project-outlined'" /> 物模型 </span>
78+
<template #tab>
79+
<span> <Icon :icon="'ant-design:project-outlined'" /> 物模型 </span>
8080
</template>
81-
<ThingModelForm ref="thingsModelFrom" :readOnly="true" />
81+
<ThingModelList ref="thingsModelList" :deviceProfileId="record?.id.id" />
8282
</TabPane>
8383
<TabPane key="ALARM">
8484
<template #tab
@@ -129,7 +129,7 @@
129129
import TransportForm from './transport/transportForm.vue';
130130
import AlarmForm from './alarm/alarmForm.vue';
131131
import ProvisionForm from './provisionForm.vue';
132-
import ThingModelForm from './thingModel/thingModelForm.vue';
132+
import ThingModelList from './thingModel/thingModelList.vue';
133133
import { ProvisionType, TransportType } from '/@/enums/deviceEnum';
134134
import ImageUrlInput from '/@/views/tb/images/ImageUrlInput.vue';
135135
@@ -149,7 +149,7 @@
149149
const tabActiveKey = ref('DETAIL');
150150
151151
const transportFrom = ref<any>(null);
152-
const thingsModelFrom = ref<any>(null);
152+
const thingsModelList = ref<any>(null);
153153
const alarmFrom = ref<any>(null);
154154
const provisionFrom = ref<any>(null);
155155
@@ -236,12 +236,6 @@
236236
alarmFrom.value.setFieldsValue(record.value?.profileData?.alarms || []);
237237
}
238238
});
239-
} else if (tabActiveKey.value == 'TGINGMODEL') {
240-
nextTick(() => {
241-
if (thingsModelFrom.value != null) {
242-
thingsModelFrom.value.setFieldsValue(record.value?.profileData?.thingModelDefine || {});
243-
}
244-
});
245239
} else if (tabActiveKey.value == 'TRANSPORT') {
246240
nextTick(() => {
247241
if (transportFrom.value != null) {

src/views/tb/product/form.vue

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,14 @@
106106
<TransportForm ref="transportFrom" />
107107
</div>
108108
</Tabs.TabPane>
109-
<Tabs.TabPane key="THINGMODEL" :forceRender="true">
109+
<!-- <Tabs.TabPane key="THINGMODEL" :forceRender="true">
110110
<template #tab>
111111
<span> 物模型 </span>
112112
</template>
113113
<div class="profile-container" :style="{ maxHeight: maxHeight + 'px' }">
114114
<ThingModelForm ref="thingModelFrom" />
115115
</div>
116-
</Tabs.TabPane>
116+
</Tabs.TabPane> -->
117117
<Tabs.TabPane key="ALARM" :forceRender="true">
118118
<template #tab>
119119
<span> 报警规则 </span>
@@ -145,7 +145,6 @@
145145
import TransportForm from './transport/transportForm.vue';
146146
import AlarmForm from './alarm/alarmForm.vue';
147147
import ProvisionForm from './provisionForm.vue';
148-
import ThingModelForm from './thingModel/thingModelForm.vue';
149148
import { FormInstance } from 'ant-design-vue/lib/form';
150149
import { BasicModal, useModalInner } from '/@/components/Modal';
151150
import { currentTenantDashboardList } from '/@/api/tb/dashboard';
@@ -181,7 +180,6 @@
181180
182181
const formRef = ref<FormInstance>();
183182
const transportFrom = ref<any>(null);
184-
const thingModelFrom = ref<any>(null);
185183
const alarmFrom = ref<any>(null);
186184
const provisionFrom = ref<any>(null);
187185
@@ -229,7 +227,6 @@
229227
transportFrom.value.setFieldsValue(
230228
record.value?.profileData?.transportConfiguration || { type: TransportType.DEFAULT },
231229
);
232-
thingModelFrom.value.setFieldsValue(record.value?.profileData?.thingModelDefine || {});
233230
provisionFrom.value.setFieldsValue(
234231
{
235232
...record.value?.profileData?.provisionConfiguration,
@@ -246,28 +243,21 @@
246243
configuration: { type: 'DEFAULT' },
247244
transportConfiguration: { type: TransportType.DEFAULT },
248245
provisionConfiguration: { type: ProvisionType.DISABLED, provisionDeviceKey: null },
249-
thingModelDefine: {},
250246
alarms: null,
251247
};
252248
try {
253249
profileData.transportConfiguration = await transportFrom.value.validate();
254250
try {
255-
profileData.thingModelDefine = await thingModelFrom.value.validate();
251+
profileData.provisionConfiguration = await provisionFrom.value.validate();
256252
try {
257-
profileData.provisionConfiguration = await provisionFrom.value.validate();
258-
try {
259-
profileData.alarms = await alarmFrom.value.validate();
260-
return profileData;
261-
} catch (error: any) {
262-
tabActiveKey.value = 'ALARM';
263-
showMessage(t('common.validateError'));
264-
}
253+
profileData.alarms = await alarmFrom.value.validate();
254+
return profileData;
265255
} catch (error: any) {
266-
tabActiveKey.value = 'PROVISION';
256+
tabActiveKey.value = 'ALARM';
267257
showMessage(t('common.validateError'));
268258
}
269259
} catch (error: any) {
270-
tabActiveKey.value = 'THINGMODEL';
260+
tabActiveKey.value = 'PROVISION';
271261
showMessage(t('common.validateError'));
272262
}
273263
} catch (error: any) {

0 commit comments

Comments
 (0)