XForm
基础的XForm的展示用法。
基本用法
<template>
<div>
<XForm ref="formRef" :form="form" :option="option" @submit="save" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { XForm } from 'cjx-low-code'
import type { FormOption } from 'cjx-low-code'
import { ElMessage } from 'element-plus'
const form = ref({
name: '',
age: '',
sex: '1'
})
const option = ref<FormOption>({
column: [
{
label: '姓名',
prop: 'name',
rules: [{ required: true, message: '请输入姓名' }]
},
{
label: '年龄',
prop: 'age',
type: 'inputNumber',
},
{
label: '性别',
prop: 'sex',
type: 'select',
dicData: [
{
label: '男',
value: '1'
},
{
label: '女',
value: '2'
}
]
}
]
})
const formRef = ref<InstanceType<typeof XForm>>()
const save = async (data: any, done) => {
const valid = await formRef.value?.validate()
if (!valid) return
setTimeout(() => {
ElMessage.success(`提交成功${JSON.stringify(data)}`)
done()
}, 500)
}
</script>表单项之间的联动
<template>
<div>
<XForm ref="formRef" :form="form" :option="option" @submit="save" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { XForm } from 'cjx-low-code'
import type { FormOption } from 'cjx-low-code'
import { ElMessage } from 'element-plus'
const form = ref({
reviewComments: '同意',
result: '1'
})
const option = ref<FormOption>({
labelWidth: 120,
column: [
{
label: '审核结果',
prop: 'result',
type: 'radio',
dicData: [
{
label: '通过',
value: '1'
},
{
label: '不通过',
value: '2'
}
],
rules: [{ required: true, message: '请选择审核结果' }],
span: 24,
},
{
label: '审核意见',
prop: 'reviewComments',
type: 'textarea',
display: ({ form }) => form.result === '1',
disabled: ({ form }) => form.result === '1',
span: 24,
},
{
label: '不同意意见',
prop: 'reviewComments',
type: 'textarea',
display: ({ form }) => form.result === '2',
rules: [{ required: true, message: '请输入审核意见' }],
span: 24
},
]
})
const formRef = ref<InstanceType<typeof XForm>>()
const save = async (data: any, done) => {
const valid = await formRef.value?.validate()
if (!valid) return
setTimeout(() => {
ElMessage.success(`提交成功${JSON.stringify(data)}`)
done()
}, 500)
}
</script>表单字典数据接口获取
<template>
<div>
<XForm ref="formRef" :form="form" :option="option" @submit="save" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { XForm } from 'cjx-low-code'
import type { FormOption } from 'cjx-low-code'
import { ElMessage } from 'element-plus'
const form = ref({
dict: '',
result: '1'
})
const getResultData = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve([
{
label: '选项1',
value: '1'
},
{
label: '选项2',
value: '2'
}
])
}, 200)
})
}
const option = ref<FormOption>({
labelWidth: 120,
column: [
{
label: '字典',
prop: 'dict',
type: 'radio',
dicAjaxResolve: getResultData(),
rules: [{ required: true, message: '请选择字典' }],
span: 24,
},
{
label: '审核意见',
prop: 'reviewComments',
type: 'textarea',
span: 24,
}
]
})
const formRef = ref<InstanceType<typeof XForm>>()
const save = async (data: any, done) => {
const valid = await formRef.value?.validate()
if (!valid) return
setTimeout(() => {
ElMessage.success(`提交成功${JSON.stringify(data)}`)
done()
}, 500)
}
</script>表单分组
<template>
<div>
<XForm ref="formRef" :form="form" :option="option" @submit="save" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { XForm } from 'cjx-low-code'
import type { FormOption } from 'cjx-low-code'
import { ElMessage } from 'element-plus'
const form = ref({
name: '',
年龄: '1'
})
const option = ref<FormOption>({
labelWidth: 120,
column: [
{
label: '姓名',
prop: 'name',
},
{
label: '年龄',
prop: 'age',
type: 'inputNumber'
}
],
group: [
{
label: '分组水果',
prop: 'group1',
column: [
{
label: '西瓜',
prop: 'watermelon',
type: 'checkbox',
dicData: [
{
label: '甜',
value: '1'
},
{
label: '大',
value: '2'
},
{
label: '绿',
value: '3'
}
],
},
{
label: '苹果',
prop: 'apple',
type: 'checkbox',
dicData: [
{
label: '甜',
value: '1'
},
{
label: '大',
value: '2'
},
{
label: '红',
value: '3'
}
]
}
]
},
{
label: '分组蔬菜',
prop: 'group2',
column: [
{
label: '胡萝卜',
prop: 'carrot',
type: 'checkbox',
dicData: [
{
label: '甜',
value: '1'
},
{
label: '大',
value: '2'
},
{
label: '橙',
value: '3'
}
]
},
]
}
]
})
const formRef = ref<InstanceType<typeof XForm>>()
const save = async (data: any, done) => {
const valid = await formRef.value?.validate()
if (!valid) return
setTimeout(() => {
ElMessage.success(`提交成功${JSON.stringify(data)}`)
done()
}, 500)
}
</script>