From 75098a438868c0247463c876695566c63ac29af5 Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Fri, 14 Jul 2023 10:32:09 +0800 Subject: [PATCH] fix: bug#16301 --- .../components/Metadata/Base/columns.tsx | 44 +++++++++++++++---- .../Metadata/Base/components/ConfigModal.vue | 17 ++++--- .../Base/components/Events/ConfigParams.vue | 11 ++--- .../Base/components/Function/InputParams.vue | 20 +++++++-- .../Base/components/Function/OutputParams.vue | 19 +++++++- yarn.lock | 4 +- 6 files changed, 84 insertions(+), 31 deletions(-) diff --git a/src/views/device/components/Metadata/Base/columns.tsx b/src/views/device/components/Metadata/Base/columns.tsx index 4f74504e..0d96b39f 100644 --- a/src/views/device/components/Metadata/Base/columns.tsx +++ b/src/views/device/components/Metadata/Base/columns.tsx @@ -37,7 +37,7 @@ const type = { report: '上报', }; -export const validatorConfig = (value: any) => { +export const validatorConfig = (value: any, isObject: boolean = false) => { if (value.type === 'enum' && !value.elements?.length) { return Promise.reject('请添加枚举项') } @@ -45,6 +45,10 @@ export const validatorConfig = (value: any) => { return Promise.reject('请选择元素类型') } + if (isObject && value.type === 'object' && !value.properties?.length) { + return Promise.reject('请添加元素类型') + } + return Promise.resolve() } @@ -227,17 +231,13 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n callback(rule: any, value: any, dataSource: any[]) { const field = rule.field.split('.') const fieldIndex = Number(field[1]) - const record = dataSource[fieldIndex] + const record = dataSource.find((item, index) => index === fieldIndex) - console.log(record) if (!record.valueType.properties.length) { return Promise.reject('请添加配置参数') } return Promise.resolve() - // if (!value?.type) { - // } - // return Promise.resolve() } }] }, @@ -294,6 +294,22 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n title: '输入参数', dataIndex: 'inputs', width: 120, + form: { + required: true, + rules: [{ + callback(rule:any,value: any, dataSource: any[]) { + const field = rule.field.split('.') + const fieldIndex = Number(field[1]) + + const values = dataSource.find((item, index) => index === fieldIndex) + + return validatorConfig({ + type: 'object', + properties: values.inputs + }, true) + } + }] + }, control(newValue, oldValue) { if (newValue && !oldValue) { return true @@ -310,6 +326,18 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n components: { name: OutputParams }, + form: { + rules: [{ + callback(rule:any,value: any, dataSource: any[]) { + const field = rule.field.split('.') + const fieldIndex = Number(field[1]) + + const values = dataSource.find((item, index) => index === fieldIndex) + + return validatorConfig(values.output) + } + }] + }, doubleClick(record) { return !isExtendsProdcut(record._sortIndex, productNoEdit?.value, 'output'); }, @@ -360,7 +388,7 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n if (!value?.type) { return Promise.reject('请选择数据类型') } - return Promise.resolve() + return validatorConfig(value, true) } }] }, @@ -471,7 +499,7 @@ export const useColumns = (type?: MetadataType, target?: 'device' | 'product', n if (!value?.type) { return Promise.reject('请选择数据类型') } - return Promise.resolve() + return validatorConfig(value, true) } }] }, diff --git a/src/views/device/components/Metadata/Base/components/ConfigModal.vue b/src/views/device/components/Metadata/Base/components/ConfigModal.vue index c543ab82..d76c8858 100644 --- a/src/views/device/components/Metadata/Base/components/ConfigModal.vue +++ b/src/views/device/components/Metadata/Base/components/ConfigModal.vue @@ -99,10 +99,14 @@ import { DataTableFile, DataTableDate, DataTableObject, + Form } from 'jetlinks-ui-components'; import ValueObject from '@/views/device/components/Metadata/Base/components/Events/ValueObject.vue' import DataTypeObjectChild from '@/views/device/components/Metadata/Base/components/DataTypeObjectChild.vue' import OtherConfigInfo from './Events/OtherConfigInfo.vue' +import {handleTypeValue, TypeStringMap, useUnit} from "@/views/device/components/Metadata/Base/columns"; +import ModelButton from '@/views/device/components/Metadata/Base/components/ModelButton.vue' +import {omit} from "lodash-es"; const props = defineProps({ value: { @@ -120,10 +124,8 @@ const props = defineProps({ }) const emit = defineEmits(['update:value']) -import {handleTypeValue, TypeStringMap, useUnit} from "@/views/device/components/Metadata/Base/columns"; -import ModelButton from '@/views/device/components/Metadata/Base/components/ModelButton.vue' -import {omit} from "lodash-es"; +const formItemContext = Form.useInjectFormItemContext(); const objectAdd = () => { return { id: undefined, @@ -238,17 +240,14 @@ const columns = [ ] const valueChange = (data: any) => { - console.log('configModal - confirm',data, props.value, type.value) const newObj = handleTypeValue(type.value, data) - console.log('configModal - newObj', newObj) - console.log('configModal - newObj2', { - type: type.value, - ...newObj - }) + + emit('update:value', { type: type.value, ...newObj }) + formItemContext.onFieldChange() } watch(() => JSON.stringify(props.value), () => { diff --git a/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue b/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue index 884f001f..3969d598 100644 --- a/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue +++ b/src/views/device/components/Metadata/Base/components/Events/ConfigParams.vue @@ -13,7 +13,7 @@ diff --git a/src/views/device/components/Metadata/Base/components/Function/OutputParams.vue b/src/views/device/components/Metadata/Base/components/Function/OutputParams.vue index 37385594..dd5793ff 100644 --- a/src/views/device/components/Metadata/Base/components/Function/OutputParams.vue +++ b/src/views/device/components/Metadata/Base/components/Function/OutputParams.vue @@ -64,7 +64,12 @@ import { import ConfigModal from '@/views/device/components/Metadata/Base/components/ConfigModal.vue' import {cloneDeep, omit} from 'lodash-es'; -import {typeSelectChange, TypeStringMap, useUnit} from "@/views/device/components/Metadata/Base/columns"; +import { + typeSelectChange, + TypeStringMap, + useUnit, + validatorConfig +} from "@/views/device/components/Metadata/Base/columns"; import Type from './Type.vue' const props = defineProps({ @@ -160,6 +165,18 @@ const columns = [ { title: '其他配置', dataIndex: 'config', + form: { + required: true, + rules: [{ + callback(rule:any,value: any, dataSource: any[]) { + const field = rule.field.split('.') + const fieldIndex = Number(field[1]) + const values = dataSource.find((item, index) => index === fieldIndex) + + return validatorConfig(values.valueType) + } + }] + }, control(newValue: any, oldValue: any) { if (newValue && !oldValue) { return true diff --git a/yarn.lock b/yarn.lock index 4a8a930a..3d77c718 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3837,8 +3837,8 @@ jetlinks-ui-components@^1.0.23: jetlinks-ui-components@^1.0.24: version "1.0.24" - resolved "http://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.24.tgz#920ba82872b918eb6f592813cdb08ddefc9a822c" - integrity sha512-x8J/jduzSeBJ7faxspaWgi/MbKiNl3aG1Mhw2TWIcr3y9qVuPS8CcQB0OHOikAFlHM+iUg7lJtfYFj11kdz4FA== + resolved "http://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.24.tgz#e973e030eb62714f7ec22202a984fa1d5e6ef451" + integrity sha512-/3bcz76Fq7MDVHI6GKxcIPLzhPRxY0aSUowH91+SuJzkOqCRcUXhBSfVyEL6mTjg/yi8fvb4Pglfkj2fomFKFw== dependencies: "@vueuse/core" "^9.12.0" "@vueuse/router" "^9.13.0"