<template> <PageWrapper title="表单基础示例"> <CollapseContainer title="基础示例"> <BasicForm autoFocusFirstItem :labelWidth="100" :schemas="schemas" :actionColOptions="{ span: 24 }" @submit="handleSubmit" /> </CollapseContainer> </PageWrapper> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import { BasicForm, FormSchema } from '/@/components/Form/index'; import { CollapseContainer } from '/@/components/Container/index'; import { useMessage } from '/@/hooks/web/useMessage'; import { PageWrapper } from '/@/components/Page'; import { optionsListApi } from '/@/api/demo/select'; const provincesOptions = [ { id: 'guangdong', label: '广东省', value: '1', key: '1', }, { id: 'jiangsu', label: '江苏省', value: '2', key: '2', }, ]; const citiesOptionsData = { guangdong: [ { label: '珠海市', value: '1', key: '1', }, { label: '深圳市', value: '2', key: '2', }, { label: '广州市', value: '3', key: '3', }, ], jiangsu: [ { label: '南京市', value: '1', key: '1', }, { label: '无锡市', value: '2', key: '2', }, { label: '苏州市', value: '3', key: '3', }, ], }; const schemas: FormSchema[] = [ { field: 'field1', component: 'Input', label: '字段1', colProps: { span: 8, }, // componentProps:{}, // can func componentProps: ({ schema, formModel }) => { console.log('form:', schema); console.log('formModel:', formModel); return { placeholder: '自定义placeholder', onChange: (e: any) => { console.log(e); }, }; }, renderComponentContent: () => { return { prefix: () => 'pSlot', suffix: () => 'sSlot', }; }, }, { field: 'field2', component: 'Input', label: '带后缀', defaultValue: '111', colProps: { span: 8, }, componentProps: { onChange: (e: any) => { console.log(e); }, }, suffix: '天', }, { field: 'field3', component: 'DatePicker', label: '字段3', colProps: { span: 8, }, }, { field: 'field4', component: 'Select', label: '字段4', colProps: { span: 8, }, componentProps: { options: [ { label: '选项1', value: '1', key: '1', }, { label: '选项2', value: '2', key: '2', }, ], }, }, { field: 'field5', component: 'CheckboxGroup', label: '字段5', colProps: { span: 8, }, componentProps: { options: [ { label: '选项1', value: '1', }, { label: '选项2', value: '2', }, ], }, }, { field: 'field7', component: 'RadioGroup', label: '字段7', colProps: { span: 8, }, componentProps: { options: [ { label: '选项1', value: '1', }, { label: '选项2', value: '2', }, ], }, }, { field: 'field8', component: 'Checkbox', label: '字段8', colProps: { span: 8, }, renderComponentContent: 'Check', }, { field: 'field9', component: 'Switch', label: '字段9', colProps: { span: 8, }, }, { field: 'field10', component: 'RadioButtonGroup', label: '字段10', colProps: { span: 8, }, componentProps: { options: [ { label: '选项1', value: '1', }, { label: '选项2', value: '2', }, ], }, }, { field: 'field11', component: 'Cascader', label: '字段11', colProps: { span: 8, }, componentProps: { options: [ { value: 'zhejiang', label: 'Zhejiang', children: [ { value: 'hangzhou', label: 'Hangzhou', children: [ { value: 'xihu', label: 'West Lake', }, ], }, ], }, { value: 'jiangsu', label: 'Jiangsu', children: [ { value: 'nanjing', label: 'Nanjing', children: [ { value: 'zhonghuamen', label: 'Zhong Hua Men', }, ], }, ], }, ], }, }, { field: 'field30', component: 'ApiSelect', label: '远程下拉', required: true, componentProps: { api: optionsListApi, }, colProps: { span: 8, }, defaultValue: '0', }, { field: 'field20', component: 'InputNumber', label: '字段20', required: true, colProps: { span: 8, }, }, { field: 'province', component: 'Select', label: '省份', colProps: { span: 8, }, componentProps: ({ formModel, formActionType }) => { return { options: provincesOptions, placeholder: '省份与城市联动', onChange: (e: any) => { // console.log(e) let citiesOptions = e == 1 ? citiesOptionsData[provincesOptions[0].id] : citiesOptionsData[provincesOptions[1].id]; // console.log(citiesOptions) if (e === undefined) { citiesOptions = []; } formModel.city = undefined; // reset city value const { updateSchema } = formActionType; updateSchema({ field: 'city', componentProps: { options: citiesOptions, }, }); }, }; }, }, { field: 'city', component: 'Select', label: '城市', colProps: { span: 8, }, componentProps: { options: [], // defalut [] placeholder: '省份与城市联动', }, }, { field: 'field21', component: 'Slider', label: '字段21', componentProps: { min: 0, max: 100, range: true, marks: { 20: '20°C', 60: '60°C', }, }, colProps: { span: 8, }, }, { field: 'field22', component: 'Rate', label: '字段22', defaultValue: 3, colProps: { span: 8, }, componentProps: { disabled: false, allowHalf: true, }, }, ]; export default defineComponent({ components: { BasicForm, CollapseContainer, PageWrapper }, setup() { const check = ref(null); const { createMessage } = useMessage(); return { schemas, handleSubmit: (values: any) => { createMessage.success('click search,values:' + JSON.stringify(values)); }, check, }; }, }); </script>