config.ts
4.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import { unref } from 'vue'
import { getDeviceAttributes, getListByConfigurationId, getListByDeviceProfileIds } from '@/api/device'
import type { DeviceItemType, ThingsModelItemType } from '@/api/device/model'
import type { FormSchema } from '@/components/Form'
import { ComponentEnum } from '@/components/Form/src/enum'
import { ContentDataFieldsEnum, ContentDataFieldsNameEnum } from '@/enums/datasource'
import { useContentDataStoreWithOut } from '@/store/modules/contentData'
import type { ProductAndDevice } from '@/api/content/model'
import { ControlComponentEnum } from '@/core/Library/packages/Control'
import { useParseParams } from '@/core/LoadData'
import { DataTypeEnum } from '@/enums/objectModelEnum'
import { useTranslation } from '@/hooks/useTranslation'
const contentDataStore = useContentDataStoreWithOut()
const { t } = useTranslation()
export const formSchemas = (componentKey?: string): FormSchema[] => {
const isTemplate = contentDataStore.isTemplate // 判断是否是模板组态
const isTemplateLink = contentDataStore.getIsTemplateLink
const params = useParseParams()
const { configurationId } = params
return [
{
field: ContentDataFieldsEnum.DEVICE_PROFILE_ID,
label: t(ContentDataFieldsNameEnum.DEVICE_PROFILE_ID),
component: ComponentEnum.INPUT,
ifShow: false,
},
{
field: ContentDataFieldsEnum.DEVICE_PROFILE_TEMPLATE_ID, // 模板产品id
label: t(ContentDataFieldsNameEnum.DEVICE_PROFILE_ID),
component: ComponentEnum.API_SELECT,
ifShow: !!isTemplate,
required: !!isTemplate,
componentProps: ({ formModel }) => {
return {
options: (unref(contentDataStore.getProductAndDevice) || []).map((item: ProductAndDevice) => ({ label: item.profileName || item.name, value: item.profileId, transportType: item?.transportType, deviceType: item?.deviceType })),
onSelect(value: string) {
formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID] = value
formModel[ContentDataFieldsEnum.ATTR] = []
},
getPopupContainer: () => document.body,
}
},
},
{
field: ContentDataFieldsEnum.DEVICE_ID,
label: t(ContentDataFieldsNameEnum.DEVICE_ID),
component: ComponentEnum.API_SELECT,
ifShow: !isTemplate,
required: !isTemplate,
componentProps: ({ formModel }) => {
const organizationId = window.useParseParams().organizationId
if (!organizationId) return
return {
showSearch: true,
api: async (params: Recordable) => {
if (isTemplateLink) return await getListByConfigurationId(configurationId!)
return await getListByDeviceProfileIds(params)
},
params: {
deviceProfileIds: unref(contentDataStore.getProductIds),
organizationId,
},
aliasField: 'alias',
fieldNames: { label: 'name', value: 'tbDeviceId' },
onSelect(value: string, option: DeviceItemType) {
formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID] = value ? option.deviceProfileId : null
formModel[ContentDataFieldsEnum.ATTR] = []
formModel[ContentDataFieldsEnum.DEVICE_NAME] = value ? option.alias || option.name : ''
},
filterOption: (inputValue: string, option: DeviceItemType) => {
return option.alias?.includes?.(inputValue) || option.name?.includes?.(inputValue)
},
}
},
},
{
field: ContentDataFieldsEnum.DEVICE_NAME,
label: t(ContentDataFieldsNameEnum.deviceName),
component: ComponentEnum.INPUT,
ifShow: false,
},
{
field: ContentDataFieldsEnum.ATTR,
label: t(ContentDataFieldsNameEnum.ATTR),
component: ComponentEnum.API_SELECT,
required: true,
componentProps: ({ formModel }) => {
const deviceProfileId = isTemplate ? formModel[ContentDataFieldsEnum.DEVICE_PROFILE_TEMPLATE_ID] : formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID]
return {
showSearch: true,
mode: 'multiple',
api: async (params: string) => {
if (!deviceProfileId) return []
const options = await getDeviceAttributes(params)
if (componentKey === ControlComponentEnum.SWITCH) { // 开关只返回bool
return options.filter((item) => {
return item.detail.dataType.type === DataTypeEnum.BOOL
})
}
return options
},
params: deviceProfileId,
fieldNames: { label: 'name', value: 'identifier' },
filterOption: (inputValue: string, option: ThingsModelItemType) => {
return option.name.includes(inputValue)
},
}
},
},
]
}