|
|
@@ -19,177 +19,192 @@ const handleUpdateConfig = (record: any) => {
|
|
|
formConfig.value.schemas[findIndex] = data;
|
|
|
};
|
|
|
|
|
|
-const [Form, { setValues, resetForm }] = useVbenForm({
|
|
|
- showDefaultActions: false,
|
|
|
- commonConfig: {
|
|
|
- componentProps: {
|
|
|
- class: 'w-full',
|
|
|
- },
|
|
|
- },
|
|
|
- handleValuesChange: (values: Record<string, any>) => {
|
|
|
- handleUpdateConfig(values);
|
|
|
- },
|
|
|
- schema: [
|
|
|
- {
|
|
|
- component: 'Input',
|
|
|
+const [Form, { setValues, resetForm, updateSchema, setFieldValue }] =
|
|
|
+ useVbenForm({
|
|
|
+ showDefaultActions: false,
|
|
|
+ commonConfig: {
|
|
|
componentProps: {
|
|
|
- placeholder: '输入控件类型',
|
|
|
- disabled: true,
|
|
|
+ class: 'w-full',
|
|
|
},
|
|
|
- fieldName: 'component',
|
|
|
- label: '控件类型',
|
|
|
},
|
|
|
- {
|
|
|
- component: 'Input',
|
|
|
- componentProps: {
|
|
|
- placeholder: '输入标题',
|
|
|
- },
|
|
|
- fieldName: 'label',
|
|
|
- label: '标题',
|
|
|
+ handleValuesChange: (values: Record<string, any>) => {
|
|
|
+ handleUpdateConfig(values);
|
|
|
},
|
|
|
- {
|
|
|
- component: 'Input',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入占位提示',
|
|
|
- },
|
|
|
- fieldName: 'componentProps.placeholder',
|
|
|
- label: '占位提示',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['label'],
|
|
|
- trigger(values) {
|
|
|
- if (values?.componentProps?.placeholder) {
|
|
|
- values.componentProps.placeholder = `请输入${values?.label}`;
|
|
|
- }
|
|
|
+ schema: [
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '输入控件类型',
|
|
|
+ disabled: true,
|
|
|
},
|
|
|
+ fieldName: 'component',
|
|
|
+ label: '控件类型',
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'Input',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入绑定字段',
|
|
|
- },
|
|
|
- fieldName: 'fieldName',
|
|
|
- label: '绑定字段',
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'Input',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入前置标签',
|
|
|
- },
|
|
|
- fieldName: 'componentProps.prefix',
|
|
|
- label: '前置标签',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['Input'].includes(values.component);
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '输入标题',
|
|
|
},
|
|
|
+ fieldName: 'label',
|
|
|
+ label: '标题',
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'Input',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入后置标签',
|
|
|
- },
|
|
|
- fieldName: 'componentProps.suffix',
|
|
|
- label: '后置标签',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['Input'].includes(values.component);
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入占位提示',
|
|
|
},
|
|
|
- },
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'Switch',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入显示字数',
|
|
|
- class: 'w-auto',
|
|
|
- },
|
|
|
- fieldName: 'componentProps.showCount',
|
|
|
- label: '显示字数',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['Input', 'Textarea'].includes(values.component);
|
|
|
+ fieldName: 'componentProps.placeholder',
|
|
|
+ label: '占位提示',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['label'],
|
|
|
+ trigger(values) {
|
|
|
+ if (values?.componentProps?.placeholder) {
|
|
|
+ values.componentProps.placeholder = `请输入${values?.label}`;
|
|
|
+ }
|
|
|
+ },
|
|
|
},
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'InputNumber',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入最大长度',
|
|
|
+ {
|
|
|
+ component: 'Select',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入绑定字段',
|
|
|
+ options: [],
|
|
|
+ showSearch: true,
|
|
|
+ filterOption(
|
|
|
+ input: string,
|
|
|
+ option: { label: string; value: string },
|
|
|
+ ) {
|
|
|
+ return (
|
|
|
+ option.value.toLowerCase().includes(input.toLowerCase()) ||
|
|
|
+ option.label.toLowerCase().includes(input.toLowerCase())
|
|
|
+ );
|
|
|
+ },
|
|
|
+ onSelect: (_, option: any) => {
|
|
|
+ setFieldValue('label', option.label);
|
|
|
+ },
|
|
|
+ },
|
|
|
+ fieldName: 'fieldName',
|
|
|
+ label: '绑定字段',
|
|
|
},
|
|
|
- fieldName: 'componentProps.maxlength',
|
|
|
- label: '最大长度',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['Input', 'Textarea'].includes(values.component);
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入前置标签',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.prefix',
|
|
|
+ label: '前置标签',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['Input'].includes(values.component);
|
|
|
+ },
|
|
|
},
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'InputNumber',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入最大值',
|
|
|
+ {
|
|
|
+ component: 'Input',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入后置标签',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.suffix',
|
|
|
+ label: '后置标签',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['Input'].includes(values.component);
|
|
|
+ },
|
|
|
+ },
|
|
|
},
|
|
|
- fieldName: 'componentProps.max',
|
|
|
- label: '最大值',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['InputNumber'].includes(values.component);
|
|
|
+ {
|
|
|
+ component: 'Switch',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入显示字数',
|
|
|
+ class: 'w-auto',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.showCount',
|
|
|
+ label: '显示字数',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['Input', 'Textarea'].includes(values.component);
|
|
|
+ },
|
|
|
},
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'InputNumber',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入最小值',
|
|
|
+ {
|
|
|
+ component: 'InputNumber',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入最大长度',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.maxlength',
|
|
|
+ label: '最大长度',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['Input', 'Textarea'].includes(values.component);
|
|
|
+ },
|
|
|
+ },
|
|
|
},
|
|
|
- fieldName: 'componentProps.min',
|
|
|
- label: '最小值',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['InputNumber'].includes(values.component);
|
|
|
+ {
|
|
|
+ component: 'InputNumber',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入最大值',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.max',
|
|
|
+ label: '最大值',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['InputNumber'].includes(values.component);
|
|
|
+ },
|
|
|
},
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'InputNumber',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入步长',
|
|
|
+ {
|
|
|
+ component: 'InputNumber',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入最小值',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.min',
|
|
|
+ label: '最小值',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['InputNumber'].includes(values.component);
|
|
|
+ },
|
|
|
+ },
|
|
|
},
|
|
|
- fieldName: 'componentProps.step',
|
|
|
- label: '步长',
|
|
|
- dependencies: {
|
|
|
- triggerFields: ['component'],
|
|
|
- show(values) {
|
|
|
- return ['InputNumber'].includes(values.component);
|
|
|
+ {
|
|
|
+ component: 'InputNumber',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入步长',
|
|
|
+ },
|
|
|
+ fieldName: 'componentProps.step',
|
|
|
+ label: '步长',
|
|
|
+ dependencies: {
|
|
|
+ triggerFields: ['component'],
|
|
|
+ show(values) {
|
|
|
+ return ['InputNumber'].includes(values.component);
|
|
|
+ },
|
|
|
},
|
|
|
},
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'Switch',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入隐藏标签',
|
|
|
- class: 'w-auto',
|
|
|
+ {
|
|
|
+ component: 'Switch',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入隐藏标签',
|
|
|
+ class: 'w-auto',
|
|
|
+ },
|
|
|
+ fieldName: 'hideLabel',
|
|
|
+ label: '隐藏标签',
|
|
|
},
|
|
|
- fieldName: 'hideLabel',
|
|
|
- label: '隐藏标签',
|
|
|
- },
|
|
|
- {
|
|
|
- component: 'InputCode',
|
|
|
- componentProps: {
|
|
|
- placeholder: '请输入验证规则',
|
|
|
+ {
|
|
|
+ component: 'InputCode',
|
|
|
+ componentProps: {
|
|
|
+ placeholder: '请输入验证规则',
|
|
|
+ },
|
|
|
+ fieldName: 'rules',
|
|
|
+ label: '验证规则',
|
|
|
},
|
|
|
- fieldName: 'rules',
|
|
|
- label: '验证规则',
|
|
|
- },
|
|
|
- ],
|
|
|
- wrapperClass: 'grid-cols-1',
|
|
|
-});
|
|
|
+ ],
|
|
|
+ wrapperClass: 'grid-cols-1',
|
|
|
+ });
|
|
|
|
|
|
watch(
|
|
|
() => formConfig.value.selectSchema,
|
|
|
@@ -201,6 +216,20 @@ watch(
|
|
|
},
|
|
|
{ deep: true, immediate: false },
|
|
|
);
|
|
|
+
|
|
|
+watch(
|
|
|
+ () => formConfig.value.columns,
|
|
|
+ async (value) => {
|
|
|
+ if (value) {
|
|
|
+ updateSchema([
|
|
|
+ { fieldName: 'fieldName', componentProps: { options: value } },
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ immediate: true,
|
|
|
+ },
|
|
|
+);
|
|
|
</script>
|
|
|
<template>
|
|
|
<div>
|