Showing
9 changed files
with
49 additions
and
23 deletions
@@ -91,6 +91,7 @@ export interface DeviceInfoType { | @@ -91,6 +91,7 @@ export interface DeviceInfoType { | ||
91 | export interface NodeDataDataSourceJsonType { | 91 | export interface NodeDataDataSourceJsonType { |
92 | deviceId: string | 92 | deviceId: string |
93 | deviceProfileId: string | 93 | deviceProfileId: string |
94 | + deviceProfileTemplateId?: string | ||
94 | attr: string | 95 | attr: string |
95 | attrInfo: ThingsModelItemType | 96 | attrInfo: ThingsModelItemType |
96 | 97 |
@@ -29,7 +29,7 @@ const loading = ref<boolean>(false) | @@ -29,7 +29,7 @@ const loading = ref<boolean>(false) | ||
29 | const dataSourceJson = ref<any>({}) | 29 | const dataSourceJson = ref<any>({}) |
30 | const thingsModelElRef = ref() | 30 | const thingsModelElRef = ref() |
31 | 31 | ||
32 | -const isInputData = ref<boolean>(false)// 判断使用那个表单 | 32 | +const isInputData = ref<boolean>(false)// 判断使用那个表单 true: 用封装的表单 false:用自己写的表单 |
33 | 33 | ||
34 | const zoomFactorValue = ref<number>(1) // 缩放因子 | 34 | const zoomFactorValue = ref<number>(1) // 缩放因子 |
35 | const isShowMultiply = ref<boolean>(false) // 只有tcp --> int和double类型才相乘缩放因子 | 35 | const isShowMultiply = ref<boolean>(false) // 只有tcp --> int和double类型才相乘缩放因子 |
@@ -100,7 +100,7 @@ const open = async (_data: SingleClickEventDataType) => { | @@ -100,7 +100,7 @@ const open = async (_data: SingleClickEventDataType) => { | ||
100 | const { type } = dataType || {} | 100 | const { type } = dataType || {} |
101 | 101 | ||
102 | const { code, transportType, deviceProfileId, alias, name: deviceName } = await getDeviceDetail(deviceId) || {}// 设备信息 | 102 | const { code, transportType, deviceProfileId, alias, name: deviceName } = await getDeviceDetail(deviceId) || {}// 设备信息 |
103 | - deviceTitle.value = alias || deviceName | 103 | + deviceTitle.value = alias || deviceName// 产品名称 |
104 | const { registerAddress, actionType, zoomFactor } = extensionDesc || {} // 获取扩展描述内容 | 104 | const { registerAddress, actionType, zoomFactor } = extensionDesc || {} // 获取扩展描述内容 |
105 | 105 | ||
106 | const schemas = [{ dataType, identifier, functionName: name } as StructJSON] | 106 | const schemas = [{ dataType, identifier, functionName: name } as StructJSON] |
@@ -117,7 +117,7 @@ const open = async (_data: SingleClickEventDataType) => { | @@ -117,7 +117,7 @@ const open = async (_data: SingleClickEventDataType) => { | ||
117 | visible.value = true | 117 | visible.value = true |
118 | 118 | ||
119 | if (transportType === TransportTypeEnum.TCP) { | 119 | if (transportType === TransportTypeEnum.TCP) { |
120 | - if (commandWay === CommandDeliveryWayEnum.SERVICE) { // 命令下发方式是服务或则自定义调用 | 120 | + if (commandWay === CommandDeliveryWayEnum.SERVICE) { // 判断命令下发方式是服务或者自定义调用 服务调用用封装的组件 自定义和modbus就用输入框 |
121 | getServiceInfo(deviceProfileId, service, serviceCommand) | 121 | getServiceInfo(deviceProfileId, service, serviceCommand) |
122 | } | 122 | } |
123 | else if (commandWay === CommandDeliveryWayEnum.CUSTOM) { // 自定义 | 123 | else if (commandWay === CommandDeliveryWayEnum.CUSTOM) { // 自定义 |
@@ -132,7 +132,7 @@ const open = async (_data: SingleClickEventDataType) => { | @@ -132,7 +132,7 @@ const open = async (_data: SingleClickEventDataType) => { | ||
132 | ]) | 132 | ]) |
133 | setFieldsValue({ sendValue: customCommand }) | 133 | setFieldsValue({ sendValue: customCommand }) |
134 | } | 134 | } |
135 | - else { | 135 | + else { // modBus调用 |
136 | isShowModBUS.value = true | 136 | isShowModBUS.value = true |
137 | modBUSForm.value = { | 137 | modBUSForm.value = { |
138 | crc: 'CRC_16_LOWER', | 138 | crc: 'CRC_16_LOWER', |
@@ -174,7 +174,7 @@ const error = () => { | @@ -174,7 +174,7 @@ const error = () => { | ||
174 | } | 174 | } |
175 | 175 | ||
176 | const handleSubmit = async () => { | 176 | const handleSubmit = async () => { |
177 | - unref(isPasswordInfo)?.checked && await validatePassword() | 177 | + unref(isPasswordInfo)?.checked && await validatePassword()// 操作密码 |
178 | !unref(isInputData) && await validate() | 178 | !unref(isInputData) && await validate() |
179 | unref(isInputData) && await unref(thingsModelElRef).validate() | 179 | unref(isInputData) && await unref(thingsModelElRef).validate() |
180 | 180 |
@@ -7,6 +7,7 @@ import { CommandWayEnum, CommandWayNameEnum } from '@/enums/commandEnum' | @@ -7,6 +7,7 @@ import { CommandWayEnum, CommandWayNameEnum } from '@/enums/commandEnum' | ||
7 | import { CommandDeliveryWayEnum, CommandDeliveryWayNameEnum, DeviceTypeEnum, EventActionTypeEnum, EventActionTypeNameEnum, EventTypeEnum, EventTypeNameEnum, TransportTypeEnum } from '@/enums/datasource' | 7 | import { CommandDeliveryWayEnum, CommandDeliveryWayNameEnum, DeviceTypeEnum, EventActionTypeEnum, EventActionTypeNameEnum, EventTypeEnum, EventTypeNameEnum, TransportTypeEnum } from '@/enums/datasource' |
8 | import type { ThingsModel } from '@/api/device/model' | 8 | import type { ThingsModel } from '@/api/device/model' |
9 | import { PackageCategoryEnum } from '@/core/Library/enum' | 9 | import { PackageCategoryEnum } from '@/core/Library/enum' |
10 | +import { useContentDataStoreWithOut } from '@/store/modules/contentData' | ||
10 | 11 | ||
11 | export enum FormFieldsEnum { | 12 | export enum FormFieldsEnum { |
12 | ACTION_TYPE = 'actionType', | 13 | ACTION_TYPE = 'actionType', |
@@ -31,13 +32,15 @@ export enum FormFieldsNameEnum { | @@ -31,13 +32,15 @@ export enum FormFieldsNameEnum { | ||
31 | SERVICE = '服务', | 32 | SERVICE = '服务', |
32 | } | 33 | } |
33 | 34 | ||
35 | +const contentDataStore = useContentDataStoreWithOut() | ||
36 | + | ||
34 | export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | 37 | export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { |
35 | const { getNodeData, getCellInfo } = usePublicFormContext() | 38 | const { getNodeData, getCellInfo } = usePublicFormContext() |
36 | const { dataSourceJson } = unref(getNodeData) || {} | 39 | const { dataSourceJson } = unref(getNodeData) || {} |
37 | const { deviceProfileId, deviceInfo } = dataSourceJson || {} | 40 | const { deviceProfileId, deviceInfo } = dataSourceJson || {} |
38 | // transportType:判断是什么类型的设备 code:设备地址码 deviceType:设备类型 | 41 | // transportType:判断是什么类型的设备 code:设备地址码 deviceType:设备类型 |
39 | - const { transportType, deviceType } = deviceInfo || {} | ||
40 | - | 42 | + const { transportType, deviceType, codeType } = deviceInfo || {} |
43 | + const isTemplate = contentDataStore.isTemplate // 判断是否是模板 | ||
41 | return [ | 44 | return [ |
42 | { | 45 | { |
43 | field: 'eventName', | 46 | field: 'eventName', |
@@ -115,11 +118,25 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | @@ -115,11 +118,25 @@ export const getFormSchemas = (event: EventTypeEnum): FormSchema[] => { | ||
115 | { label: CommandDeliveryWayNameEnum.MODBUS, value: CommandDeliveryWayEnum.MODBUS }, | 118 | { label: CommandDeliveryWayNameEnum.MODBUS, value: CommandDeliveryWayEnum.MODBUS }, |
116 | ] | 119 | ] |
117 | let options = [...values] | 120 | let options = [...values] |
118 | - if (deviceType === DeviceTypeEnum.SENSOR && transportType === TransportTypeEnum.TCP) | ||
119 | - options = values.filter(item => item.value !== CommandDeliveryWayEnum.SERVICE) | 121 | + if (transportType === TransportTypeEnum.TCP) { // 只有TCP类型的才有MODBUS |
122 | + if (codeType === CommandDeliveryWayEnum.CUSTOM) { | ||
123 | + if (deviceType !== DeviceTypeEnum.SENSOR) | ||
124 | + options = values.filter(item => item.value !== CommandDeliveryWayEnum.MODBUS) | ||
120 | 125 | ||
121 | - if (transportType !== TransportTypeEnum.TCP) | 126 | + else |
127 | + options = values.filter(item => item.value === CommandDeliveryWayEnum.CUSTOM) | ||
128 | + } | ||
129 | + else { | ||
130 | + if (deviceType === DeviceTypeEnum.SENSOR) | ||
131 | + options = values.filter(item => item.value !== CommandDeliveryWayEnum.SERVICE) | ||
132 | + } | ||
133 | + } | ||
134 | + else { | ||
122 | options = values.filter(item => item.value !== CommandDeliveryWayEnum.MODBUS) | 135 | options = values.filter(item => item.value !== CommandDeliveryWayEnum.MODBUS) |
136 | + } | ||
137 | + | ||
138 | + if (isTemplate)// 是模板的话选择不到设备标识符类型所以就判断为放开自定义命令 | ||
139 | + options = values.filter(item => item.value === CommandDeliveryWayEnum.CUSTOM) | ||
123 | 140 | ||
124 | return { | 141 | return { |
125 | options, | 142 | options, |
@@ -43,7 +43,7 @@ const setFieldsValue = (record: Partial<Record<EventTypeEnum, boolean>>) => { | @@ -43,7 +43,7 @@ const setFieldsValue = (record: Partial<Record<EventTypeEnum, boolean>>) => { | ||
43 | } | 43 | } |
44 | 44 | ||
45 | const getDisabledStatus = (key: EventTypeEnum) => { | 45 | const getDisabledStatus = (key: EventTypeEnum) => { |
46 | - const data = unref(getNodeData)?.eventJson[key] | 46 | + const data = unref(getNodeData)?.eventJson?.[key] |
47 | return !data | 47 | return !data |
48 | } | 48 | } |
49 | 49 |
@@ -30,7 +30,7 @@ export const formSchemas = (componentKey?: string): FormSchema[] => { | @@ -30,7 +30,7 @@ export const formSchemas = (componentKey?: string): FormSchema[] => { | ||
30 | placeholder: '请选择产品', | 30 | placeholder: '请选择产品', |
31 | onSelect(value: string, option: any) { | 31 | onSelect(value: string, option: any) { |
32 | formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID] = value | 32 | formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID] = value |
33 | - formModel[ContentDataFieldsEnum.DEVICE_INFO] = value && option ? { transportType: option.transportType, deviceType: option.deviceType } : null | 33 | + formModel[ContentDataFieldsEnum.DEVICE_INFO] = value && option ? { transportType: option.transportType, deviceType: option.deviceType, codeType: option?.codeType } : null |
34 | }, | 34 | }, |
35 | getPopupContainer: () => document.body, | 35 | getPopupContainer: () => document.body, |
36 | } | 36 | } |
@@ -56,11 +56,13 @@ export const formSchemas = (componentKey?: string): FormSchema[] => { | @@ -56,11 +56,13 @@ export const formSchemas = (componentKey?: string): FormSchema[] => { | ||
56 | fieldNames: { label: 'name', value: 'tbDeviceId' }, | 56 | fieldNames: { label: 'name', value: 'tbDeviceId' }, |
57 | onSelect(value: string, option: DeviceItemType) { | 57 | onSelect(value: string, option: DeviceItemType) { |
58 | formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID] = value ? option.deviceProfileId : null | 58 | formModel[ContentDataFieldsEnum.DEVICE_PROFILE_ID] = value ? option.deviceProfileId : null |
59 | - formModel[ContentDataFieldsEnum.DEVICE_INFO] = value && option ? { code: option.code, transportType: option.transportType, deviceType: option.deviceType, deviceProfileId: option.deviceProfileId, deviceName: option.alias || option.name } : null | 59 | + formModel[ContentDataFieldsEnum.DEVICE_INFO] = value && option ? { code: option.code, transportType: option.transportType, deviceType: option.deviceType, deviceProfileId: option.deviceProfileId, deviceName: option.alias || option.name, codeType: option?.codeType } : null |
60 | formModel[ContentDataFieldsEnum.ATTR] = null | 60 | formModel[ContentDataFieldsEnum.ATTR] = null |
61 | }, | 61 | }, |
62 | - filterOption: (inputValue: string, option: DeviceItemType) => | ||
63 | - option.alias?.includes?.(inputValue) || option.name?.includes?.(inputValue), | 62 | + filterOption: (inputValue: string, option: DeviceItemType) => { |
63 | + option.alias?.includes?.(inputValue) || option.name?.includes?.(inputValue) | ||
64 | + }, | ||
65 | + | ||
64 | } | 66 | } |
65 | }, | 67 | }, |
66 | }, | 68 | }, |
@@ -95,7 +95,7 @@ const handleSave = async () => { | @@ -95,7 +95,7 @@ const handleSave = async () => { | ||
95 | if (operationPassword.checked) | 95 | if (operationPassword.checked) |
96 | await validatePassword() | 96 | await validatePassword() |
97 | if (contentDataStore.getIsTemplate)// 判断组态是不是模板 | 97 | if (contentDataStore.getIsTemplate)// 判断组态是不是模板 |
98 | - dataSourceJson = { ...value, deviceProfileId: value?.deviceProfileTemplateId, deviceId: null, deviceInfo: null } | 98 | + dataSourceJson = { ...value, deviceProfileId: value?.deviceProfileTemplateId, deviceId: null } |
99 | await saveNodeAllData({ dataSourceJson, eventJson: { ...eventJson, OPERATION_PASSWORD: unref(getCellInfo).category === PackageCategoryEnum.CONTROL ? operationPassword : undefined }, actJson }) | 99 | await saveNodeAllData({ dataSourceJson, eventJson: { ...eventJson, OPERATION_PASSWORD: unref(getCellInfo).category === PackageCategoryEnum.CONTROL ? operationPassword : undefined }, actJson }) |
100 | createMessage.success('操作成功~') | 100 | createMessage.success('操作成功~') |
101 | savePageContent() | 101 | savePageContent() |
@@ -51,9 +51,9 @@ const handleSubmit = async () => { | @@ -51,9 +51,9 @@ const handleSubmit = async () => { | ||
51 | 51 | ||
52 | const handleSetFormValues = async () => { | 52 | const handleSetFormValues = async () => { |
53 | const { dataSourceJson } = unref(getNodeData) || {} | 53 | const { dataSourceJson } = unref(getNodeData) || {} |
54 | - const { deviceId, attr, chartOption, deviceProfileId, attrInfo } = dataSourceJson || {} | 54 | + const { deviceId, attr, chartOption, deviceProfileId, deviceProfileTemplateId, attrInfo } = dataSourceJson || {} |
55 | await nextTick() | 55 | await nextTick() |
56 | - unref(dataSourceElRef)?.setFieldsValue({ deviceId, attr, deviceProfileId, attrInfo }) | 56 | + unref(dataSourceElRef)?.setFieldsValue({ deviceId, attr, deviceProfileId, attrInfo, deviceProfileTemplateId }) |
57 | setFieldsValue({ ...chartOption }) | 57 | setFieldsValue({ ...chartOption }) |
58 | } | 58 | } |
59 | 59 |
@@ -12,6 +12,7 @@ import type { ConfigComponentProps } from '@/core/Library/types' | @@ -12,6 +12,7 @@ import type { ConfigComponentProps } from '@/core/Library/types' | ||
12 | import { createPublicFormContext } from '@/core/Library/components/PublicForm/usePublicFormContext' | 12 | import { createPublicFormContext } from '@/core/Library/components/PublicForm/usePublicFormContext' |
13 | import { useMessage } from '@/hooks/web/useMessage' | 13 | import { useMessage } from '@/hooks/web/useMessage' |
14 | import { useSavePageContent } from '@/core/Library/hook/useSavePageContent' | 14 | import { useSavePageContent } from '@/core/Library/hook/useSavePageContent' |
15 | +import { useContentDataStoreWithOut } from '@/store/modules/contentData' | ||
15 | 16 | ||
16 | const props = defineProps<ConfigComponentProps>() | 17 | const props = defineProps<ConfigComponentProps>() |
17 | 18 | ||
@@ -28,6 +29,7 @@ const [register, { getFieldsValue, setFieldsValue, validate }] = useForm({ | @@ -28,6 +29,7 @@ const [register, { getFieldsValue, setFieldsValue, validate }] = useForm({ | ||
28 | labelWidth: 70, | 29 | labelWidth: 70, |
29 | }) | 30 | }) |
30 | 31 | ||
32 | +const contentDataStore = useContentDataStoreWithOut() | ||
31 | const loading = ref(false) | 33 | const loading = ref(false) |
32 | const { createMessage } = useMessage() | 34 | const { createMessage } = useMessage() |
33 | const { savePageContent } = useSavePageContent() | 35 | const { savePageContent } = useSavePageContent() |
@@ -38,7 +40,11 @@ const handleSubmit = async () => { | @@ -38,7 +40,11 @@ const handleSubmit = async () => { | ||
38 | await validate() | 40 | await validate() |
39 | const value = unref(dataSourceElRef)?.getFieldsValue() | 41 | const value = unref(dataSourceElRef)?.getFieldsValue() |
40 | const values = getFieldsValue() | 42 | const values = getFieldsValue() |
41 | - await saveNodeAllData({ dataSourceJson: { ...value, chartOption: values } }) | 43 | + let dataSourceJson = value |
44 | + if (contentDataStore.getIsTemplate) | ||
45 | + dataSourceJson = { ...value, deviceProfileId: value?.deviceProfileTemplateId, deviceId: null } | ||
46 | + | ||
47 | + await saveNodeAllData({ dataSourceJson: { ...dataSourceJson, chartOption: values } }) | ||
42 | createMessage.success('操作成功~') | 48 | createMessage.success('操作成功~') |
43 | savePageContent() | 49 | savePageContent() |
44 | } | 50 | } |
@@ -49,9 +55,9 @@ const handleSubmit = async () => { | @@ -49,9 +55,9 @@ const handleSubmit = async () => { | ||
49 | 55 | ||
50 | const handleSetFormValues = async () => { | 56 | const handleSetFormValues = async () => { |
51 | const { dataSourceJson } = unref(getNodeData) || {} | 57 | const { dataSourceJson } = unref(getNodeData) || {} |
52 | - const { deviceId, attr, chartOption, deviceProfileId, attrInfo } = dataSourceJson || {} | 58 | + const { deviceId, attr, chartOption, deviceProfileId, attrInfo, deviceProfileTemplateId } = dataSourceJson || {} |
53 | await nextTick() | 59 | await nextTick() |
54 | - unref(dataSourceElRef)?.setFieldsValue({ deviceId, attr, deviceProfileId, attrInfo }) | 60 | + unref(dataSourceElRef)?.setFieldsValue({ deviceId, attr, deviceProfileId, attrInfo, deviceProfileTemplateId }) |
55 | setFieldsValue({ ...chartOption }) | 61 | setFieldsValue({ ...chartOption }) |
56 | } | 62 | } |
57 | 63 |
@@ -32,9 +32,9 @@ const dataSourceElRef = ref<Nullable<InstanceType<typeof DataSourceForm>>>() | @@ -32,9 +32,9 @@ const dataSourceElRef = ref<Nullable<InstanceType<typeof DataSourceForm>>>() | ||
32 | 32 | ||
33 | const handleSetFormValues = async () => { | 33 | const handleSetFormValues = async () => { |
34 | const { dataSourceJson } = unref(getNodeData) || {} | 34 | const { dataSourceJson } = unref(getNodeData) || {} |
35 | - const { deviceId, attr, chartOption, deviceProfileId, attrInfo } = dataSourceJson || {} | 35 | + const { deviceId, attr, chartOption, deviceProfileId, deviceProfileTemplateId, attrInfo } = dataSourceJson || {} |
36 | await nextTick() | 36 | await nextTick() |
37 | - unref(dataSourceElRef)?.setFieldsValue({ deviceId, attr, deviceProfileId, attrInfo }) | 37 | + unref(dataSourceElRef)?.setFieldsValue({ deviceId, attr, deviceProfileId, deviceProfileTemplateId, attrInfo }) |
38 | setFieldsValue({ ...chartOption }) | 38 | setFieldsValue({ ...chartOption }) |
39 | } | 39 | } |
40 | 40 |