fix: 优化物模型-功能定义(输入、输出)

This commit is contained in:
XieYongHong 2023-07-06 18:15:19 +08:00
parent c4faec62c1
commit 1622206283
4 changed files with 90 additions and 47 deletions

View File

@ -138,13 +138,16 @@ const handleDataTable = (type: string) => {
...props.data.valueType
}
break;
case 'array':
dataTypeTable.dataSource = props.data.valueType.elementType
break;
}
}
watch(() => props.data.valueType.type, () => {
const type = props.data.valueType.type
handleDataTable(props.data.valueType.type === 'array' ? props.data.valueType.elementType : props.data.valueType.type)
handleDataTable(props.data.valueType.type)
if (['float', 'double', 'int', 'long'].includes(type)) {
getUnit().then((res) => {

View File

@ -1,9 +1,9 @@
<template>
<div class="input-params">
<div class="input-params-text">
{{ value?.map((item) => item.name).join(',') }}
{{ dataSource?.map((item) => item.name).join(',') }}
</div>
<DataTableObject v-model:value="value" :columns="columns" :addItem="addItem" width="700px" @confirm="confirm">
<DataTableObject v-model:value="dataSource" :columns="columns" :onAdd="addItem" width="700px" @confirm="confirm">
<template #valueType="{ data }">
<span>{{ data.record.valueType?.type }}</span>
</template>
@ -40,43 +40,7 @@ const addItem = () => {
}
}
const columns = [
{ title: '参数标识', dataIndex: 'id', type: 'text', form: { required: true, rules: [{ required: true, message: '请输入标识'}]} },
{ title: '参数名称', dataIndex: 'name', type: 'text', form: { required: true, rules: [{ required: true, message: '请输入名称'}]} },
{
title: '填写约束',
dataIndex: 'required',
type: 'components',
width: 100,
components: {
name: ConstraintSelect,
props: {
name: ['expands', 'required']
}
}
},
{
title: '数据类型',
type: 'components',
dataIndex: 'valueType',
components: {
name: ValueObject,
},
},
{
title: '其他配置',
dataIndex: 'config',
type: 'components',
components: {
name: DataTypeObjectChild
}
},
{
title: '操作',
dataIndex: 'action',
width: 60
},
];
const columns = ref()
type Emits = {
(e: 'update:value', data: Record<string, any>): void;
@ -99,26 +63,91 @@ const props = defineProps({
},
});
const value = ref(props.value);
const dataSource = ref(props.value);
const change = (v: string) => {
emit('update:value', { ...props.value, async: value.value });
emit('update:value', { ...props.value, async: dataSource.value });
emit('change', v);
};
watch(
() => props.value,
(newV) => {
value.value = props.value.inputs;
dataSource.value = props.value.inputs;
},
{ immediate: true },
);
watch(() => JSON.stringify(dataSource.value), () => {
columns.value = [
{
title: '参数标识',
dataIndex: 'id',
type: 'text',
form: {
required: true,
rules: [
{ required: true, message: '请输入标识' },
{
validator(va:any,value: any) {
const fieldIndex = va.field.split('.')[1]
const oldValue = (dataSource!.value || []).filter((_, index) => index != fieldIndex)
console.log(dataSource!.value)
const hasId = oldValue.some((item) => item.id === value)
if (value) {
if (hasId) {
return Promise.reject('标识重复')
}
return Promise.resolve()
}
return Promise.reject('请输入标识')
}
},
]
}
},
{ title: '参数名称', dataIndex: 'name', type: 'text', form: { required: true, rules: [{ required: true, message: '请输入名称'}]} },
{
title: '填写约束',
dataIndex: 'required',
type: 'components',
width: 100,
components: {
name: ConstraintSelect,
props: {
name: ['expands', 'required']
}
}
},
{
title: '数据类型',
type: 'components',
dataIndex: 'valueType',
components: {
name: ValueObject,
},
},
{
title: '其他配置',
dataIndex: 'config',
type: 'components',
components: {
name: DataTypeObjectChild
}
},
{
title: '操作',
dataIndex: 'action',
width: 60
},
]
}, { immediate: true})
const confirm = (v: any) => {
console.log(v)
emit('update:value', {
...props.value,
inputs: value.value
inputs: dataSource.value
})
}
</script>

View File

@ -18,7 +18,7 @@
{
title: '数据类型',
type: 'components',
dataIndex: ['valueType', 'type'],
dataIndex: 'valueTypes',
components: {
name: DataTableTypeSelect,
}
@ -36,6 +36,7 @@
}
]"
@confirm="valueChange"
:onAdd="addItem"
/>
<DataTableEnum v-else-if="type === 'enum'" v-model:value="data" @confirm="valueChange"/>
<DataTableBoolean v-else-if="type === 'boolean'" v-model:value="data" @confirm="valueChange"/>
@ -120,6 +121,16 @@ watch(
{ immediate: true, deep: true },
);
const addItem = () => {
return {
id: undefined,
name: undefined,
valueType: {
type: undefined
}
}
}
const valueChange = () => {
emit('update:value', {

View File

@ -3825,8 +3825,8 @@ jetlinks-store@^0.0.3:
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#201ac2119b4707a4d793b819a79ac37fe9bd1ae6"
integrity sha512-382mUqzC+/rWrqTJyarlODdwCchxgB0ZzcGOGmrqOn37eAF+grfPnpY6UsT4or0njes4eu//RlniLc92dVNcUA==
resolved "http://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.24.tgz#1b7ad3ecf9eb4cc8f42692f935d6f2c5cf70e597"
integrity sha512-+tS6vzKJlphNUCR59Lc8vJpRfHIzSyMVuhHPfTH3dAa4Ow3OXaUxRdqJhQbDxIwptP3u2Rc7nxdZ5GZFMbJgjw==
dependencies:
"@vueuse/core" "^9.12.0"
"@vueuse/router" "^9.13.0"