fix: bug#16301

This commit is contained in:
XieYongHong 2023-07-14 10:32:09 +08:00
parent 3e354f1a21
commit 75098a4388
6 changed files with 84 additions and 31 deletions

View File

@ -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)
}
}]
},

View File

@ -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), () => {

View File

@ -13,7 +13,7 @@
<script setup lang="ts" name="ConfigParams">
import type { PropType } from 'vue';
import {
DataTableObject,
DataTableObject, Form,
} from 'jetlinks-ui-components';
import { ValueObject } from '../index'
@ -97,12 +97,7 @@ const columns = [
const field = rule.field.split('.')
const fieldIndex = Number(field[1])
const record = dataSource[fieldIndex]
console.log(record)
return validatorConfig(record.valueType)
// if (!value?.type) {
// return Promise.reject('')
// }
// return Promise.resolve()
}
}]
},
@ -146,10 +141,11 @@ const props = defineProps({
});
const value = ref(props.value.properties);
const formItemContext = Form.useInjectFormItemContext();
const confirm = (data: any) => {
console.log('ConfigParams',data)
const newObject = data.map((item) => {
const newObject = data.map((item: any) => {
return omit(item, ['_sortIndex', 'config', 'action'])
})
@ -159,6 +155,7 @@ const confirm = (data: any) => {
properties: newObject,
type: 'object',
})
formItemContext.onFieldChange()
}
watch(

View File

@ -17,10 +17,10 @@
import type { PropType } from 'vue';
import ConfigModal from '@/views/device/components/Metadata/Base/components/ConfigModal.vue'
import {
DataTableObject,
DataTableObject, Form
} from 'jetlinks-ui-components';
import { ConstraintSelect, ValueObject } from '../index'
import {TypeStringMap} from "../../columns";
import {TypeStringMap, validatorConfig} from "../../columns";
import ModelButton from '@/views/device/components/Metadata/Base/components/ModelButton.vue'
import {omit} from "lodash-es";
@ -44,7 +44,7 @@ const props = defineProps({
default: () => [],
},
});
const formItemContext = Form.useInjectFormItemContext();
const addItem = () => {
return {
@ -121,7 +121,6 @@ const columns = ref([
required: true,
rules: [{
validator(_: any, value: any) {
console.log('validator',value)
if (!value?.type) {
return Promise.reject('请选择数据类型')
}
@ -136,6 +135,18 @@ const columns = ref([
{
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
@ -168,6 +179,7 @@ const columns = ref([
const confirm = (v: any) => {
console.log('inputParams',v)
emit('update:value', v)
formItemContext.onFieldChange()
}
</script>

View File

@ -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

View File

@ -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"