import{e as a,o as n,G as t}from"./vendor.js";const l={class:"markdown-body"},p=t(`
Form \u8868\u5355\u7EC4\u4EF6
\u4ECB\u7ECD
\u7528\u4E8E\u6570\u636E\u5F55\u5165\u3001\u6821\u9A8C\uFF0C\u652F\u6301\u8F93\u5165\u6846\u3001\u5355\u9009\u6846\u3001\u590D\u9009\u6846\u3001\u6587\u4EF6\u4E0A\u4F20\u7B49\u7C7B\u578B\uFF0C\u9700\u8981\u4E0E Cell \u7EC4\u4EF6\u642D\u914D\u4F7F\u7528\u3002
\u5B89\u88C5
import { createApp } from 'vue';
import { Form,FormItem,Cell,CellGroup } from '@nutui/nutui';
import { Form,FormItem,Cell,CellGroup } from '@nutui/nutui-taro';
const app = createApp();
app.use(Form);
app.use(FormItem);
app.use(Cell);
app.use(CellGroup);
\u57FA\u7840\u7528\u6CD5
<nut-form>
<nut-form-item label="\u59D3\u540D">
<input class="nut-input-text" placeholder="\u8BF7\u8F93\u5165\u59D3\u540D" type="text" />
</nut-form-item>
<nut-form-item label="\u5E74\u9F84">
<input class="nut-input-text" placeholder="\u8BF7\u8F93\u5165\u5E74\u9F84" type="text" />
</nut-form-item>
<nut-form-item label="\u8054\u7CFB\u7535\u8BDD">
<input class="nut-input-text" placeholder="\u8BF7\u8F93\u5165\u8054\u7CFB\u7535\u8BDD" type="text" />
</nut-form-item>
<nut-form-item label="\u5730\u5740">
<input class="nut-input-text" placeholder="\u8BF7\u8F93\u5165\u5730\u5740" type="text" />
</nut-form-item>
</nut-form>
\u8868\u5355\u6821\u9A8C
<nut-form :model-value="formData" ref="ruleForm">
<nut-form-item label="\u59D3\u540D" prop="name" required :rules="[{ required: true, message: '\u8BF7\u586B\u5199\u59D3\u540D' }]">
<input class="nut-input-text" v-model="formData.name" placeholder="\u8BF7\u8F93\u5165\u59D3\u540D" type="text" />
</nut-form-item>
<nut-form-item label="\u5E74\u9F84" prop="age" required :rules="[
{ required: true, message: '\u8BF7\u586B\u5199\u5E74\u9F84' },
{ validator: customValidator, message: '\u5FC5\u987B\u8F93\u5165\u6570\u5B57' },
{ regex: /^(\\d{1,2}|1\\d{2}|200)$/, message: '\u5FC5\u987B\u8F93\u51650-200\u533A\u95F4' }
]">
<input class="nut-input-text" v-model="formData.age" placeholder="\u8BF7\u8F93\u5165\u5E74\u9F84\uFF0C\u5FC5\u987B\u6570\u5B57\u4E140-200\u533A\u95F4" type="text" />
</nut-form-item>
<nut-form-item label="\u8054\u7CFB\u7535\u8BDD" prop="tel" required :rules="[
{ required: true, message: '\u8BF7\u586B\u5199\u8054\u7CFB\u7535\u8BDD' },
{ validator: asyncValidator, message: '\u7535\u8BDD\u683C\u5F0F\u4E0D\u6B63\u786E' }
]">
<input class="nut-input-text" v-model="formData.tel" placeholder="\u8BF7\u8F93\u5165\u8054\u7CFB\u7535\u8BDD\uFF0C\u5F02\u6B65\u6821\u9A8C\u7535\u8BDD\u683C\u5F0F" type="text" />
</nut-form-item>
<nut-form-item label="\u5730\u5740" prop="address" required :rules="[{ required: true, message: '\u8BF7\u586B\u5199\u5730\u5740' }]">
<input class="nut-input-text" v-model="formData.address" placeholder="\u8BF7\u8F93\u5165\u5730\u5740" type="text" />
</nut-form-item>
<nut-cell>
<nut-button type="primary" size="small" style="margin-right: 10px" @click="submit">\u63D0\u4EA4</nut-button>
<nut-button size="small" @click="reset">\u91CD\u7F6E\u63D0\u793A\u72B6\u6001</nut-button>
</nut-cell>
</nut-form>
setup(){
const formData = reactive({
name: '',
age: '',
tel: '',
address: ''
});
const validate = (item: any) => {
console.log(item);
};
const ruleForm = ref<any>(null);
const submit = () => {
ruleForm.value.validate().then(({ valid, errors }: any) => {
if (valid) {
console.log('success', formData);
} else {
console.log('error submit!!', errors);
}
});
};
const reset = () => {
ruleForm.value.reset();
};
const customValidator = (val: string) => /^\\d+$/.test(val);
const asyncValidator = (val: string) => {
return new Promise((resolve) => {
Toast.loading('\u6A21\u62DF\u5F02\u6B65\u9A8C\u8BC1\u4E2D...');
setTimeout(() => {
Toast.hide();
resolve(/^400(-?)[0-9]{7}$|^1\\d{10}$|^0[0-9]{2,3}-[0-9]{7,8}$/.test(val));
}, 1000);
});
};
return { ruleForm, formData, validate, customValidator, asyncValidator, submit, reset, formData2, addressModule };
}
\u8868\u5355\u7C7B\u578B
<nut-form>
<nut-form-item label="\u5F00\u5173">
<nut-switch v-model="formData2.switch"></nut-switch>
</nut-form-item>
<nut-form-item label="\u590D\u9009\u6846">
<nut-checkbox v-model="formData2.checkbox">\u590D\u9009\u6846</nut-checkbox>
</nut-form-item>
<nut-form-item label="\u5355\u9009\u6309\u94AE">
<nut-radiogroup direction="horizontal" v-model="formData2.radio">
<nut-radio label="1">\u9009\u98791</nut-radio>
<nut-radio disabled label="2">\u9009\u98792</nut-radio>
<nut-radio label="3">\u9009\u98793</nut-radio>
</nut-radiogroup>
</nut-form-item>
<nut-form-item label="\u8BC4\u5206">
<nut-rate v-model="formData2.rate" />
</nut-form-item>
<nut-form-item label="\u6B65\u8FDB\u5668">
<nut-inputnumber v-model="formData2.number" />
</nut-form-item>
<nut-form-item label="\u6ED1\u5757">
<nut-range hidden-tag v-model="formData2.range"></nut-range>
</nut-form-item>
<nut-form-item label="\u6587\u4EF6\u4E0A\u4F20">
<nut-uploader url="http://\u670D\u52A1\u5730\u5740" v-model:file-list="formData2.defaultFileList" maximum="3" multiple>
</nut-uploader>
</nut-form-item>
<nut-form-item label="\u5730\u5740">
<input class="nut-input-text" v-model="formData2.address" @click="addressModule.methods.show" readonly
placeholder="\u8BF7\u9009\u62E9\u5730\u5740" type="text" />
<nut-address v-model:visible="addressModule.state.show" :province="addressModule.state.province"
:city="addressModule.state.city" :country="addressModule.state.country" :town="addressModule.state.town"
@change="addressModule.methods.onChange" custom-address-title="\u8BF7\u9009\u62E9\u6240\u5728\u5730\u533A"></nut-address>
</nut-form-item>
</nut-form>
setup(){
const formData2 = reactive({
switch: false,
checkbox: false,
radio: 0,
number: 0,
rate: 3,
range: 30,
address: '',
defaultFileList: [
{
name: '\u6587\u4EF61.png',
url: 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif',
status: 'success',
message: '\u4E0A\u4F20\u6210\u529F',
type: 'image'
},
{
name: '\u6587\u4EF62.png',
url: 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif',
status: 'uploading',
message: '\u4E0A\u4F20\u4E2D...',
type: 'image'
}
]
});
const addressModule = reactive({
state: {
show: false,
province: [
{ id: 1, name: '\u5317\u4EAC' },
{ id: 2, name: '\u5E7F\u897F' },
{ id: 3, name: '\u6C5F\u897F' },
{ id: 4, name: '\u56DB\u5DDD' }
],
city: [
{ id: 7, name: '\u671D\u9633\u533A' },
{ id: 8, name: '\u5D07\u6587\u533A' },
{ id: 9, name: '\u660C\u5E73\u533A' },
{ id: 6, name: '\u77F3\u666F\u5C71\u533A' }
],
country: [
{ id: 3, name: '\u516B\u91CC\u5E84\u8857\u9053' },
{ id: 9, name: '\u5317\u82D1' },
{ id: 4, name: '\u5E38\u8425\u4E61' }
],
town: []
},
methods: {
show() {
addressModule.state.show = !addressModule.state.show;
if (addressModule.state.show) {
formData2.address = '';
}
},
onChange({ custom, next, value }: any) {
formData2.address += value.name;
const name = addressModule.state[next];
if (name.length < 1) {
addressModule.state.show = false;
}
}
}
});
return { formData2, addressModule };
}
Form Props
| \u53C2\u6570 | \u8BF4\u660E | \u7C7B\u578B | \u9ED8\u8BA4\u503C |
|---|
| model-value | \u8868\u5355\u6570\u636E\u5BF9\u8C61(\u4F7F\u7528\u8868\u5355\u6821\u9A8C\u65F6\uFF0C\u5FC5\u586B) | object | |
Form Events
| \u4E8B\u4EF6\u540D | \u8BF4\u660E | \u56DE\u8C03\u53C2\u6570 |
|---|
| validate | \u4EFB\u4E00\u8868\u5355\u9879\u88AB\u6821\u9A8C\u5931\u8D25\u540E\u89E6\u53D1 | \u88AB\u6821\u9A8C\u7684\u8868\u5355\u9879 prop \u503C\uFF0C\u6821\u9A8C\u662F\u5426\u901A\u8FC7\uFF0C\u9519\u8BEF\u6D88\u606F\uFF08\u5982\u679C\u5B58\u5728\uFF09 |
FormItem Props
| \u53C2\u6570 | \u8BF4\u660E | \u7C7B\u578B | \u9ED8\u8BA4\u503C |
|---|
| required | \u662F\u5426\u663E\u793A\u5FC5\u586B\u5B57\u6BB5\u7684\u6807\u7B7E\u65C1\u8FB9\u7684\u7EA2\u8272\u661F\u53F7 | boolean | false |
| label-width | \u8868\u5355\u9879 label \u5BBD\u5EA6\uFF0C\u9ED8\u8BA4\u5355\u4F4D\u4E3Apx | number | string | 90px |
| label-align | \u8868\u5355\u9879 label \u5BF9\u9F50\u65B9\u5F0F\uFF0C\u53EF\u9009\u503C\u4E3A center right | string | left |
| body-align | \u8F93\u5165\u6846\u5BF9\u9F50\u65B9\u5F0F\uFF0C\u53EF\u9009\u503C\u4E3A center right | string | left |
| error-message-align | \u9519\u8BEF\u63D0\u793A\u6587\u6848\u5BF9\u9F50\u65B9\u5F0F\uFF0C\u53EF\u9009\u503C\u4E3A center right | string | left |
| show-error-line | \u662F\u5426\u5728\u6821\u9A8C\u4E0D\u901A\u8FC7\u65F6\u6807\u7EA2\u8F93\u5165\u6846 | boolean | true |
| show-error-message | \u662F\u5426\u5728\u6821\u9A8C\u4E0D\u901A\u8FC7\u65F6\u5728\u8F93\u5165\u6846\u4E0B\u65B9\u5C55\u793A\u9519\u8BEF\u63D0\u793A | boolean | true |
FormItem Rule \u6570\u636E\u7ED3\u6784
\u4F7F\u7528 FormItem \u7684rules\u5C5E\u6027\u53EF\u4EE5\u5B9A\u4E49\u6821\u9A8C\u89C4\u5219\uFF0C\u53EF\u9009\u5C5E\u6027\u5982\u4E0B:
| \u952E\u540D | \u8BF4\u660E | \u7C7B\u578B |
|---|
| required | \u662F\u5426\u4E3A\u5FC5\u9009\u5B57\u6BB5 | boolean |
| message | \u9519\u8BEF\u63D0\u793A\u6587\u6848 | string |
| validator | \u901A\u8FC7\u51FD\u6570\u8FDB\u884C\u6821\u9A8C | (value, rule) => boolean | string | Promise |
| regex | \u901A\u8FC7\u6B63\u5219\u8868\u8FBE\u5F0F\u8FDB\u884C\u6821\u9A8C | RegExp |
Methods
\u901A\u8FC7 ref \u53EF\u4EE5\u83B7\u53D6\u5230 Form \u5B9E\u4F8B\u5E76\u8C03\u7528\u5B9E\u4F8B\u65B9\u6CD5
| \u65B9\u6CD5\u540D | \u8BF4\u660E | \u53C2\u6570 | \u8FD4\u56DE\u503C |
|---|
| submit | \u63D0\u4EA4\u8868\u5355\u8FDB\u884C\u6821\u9A8C\u7684\u65B9\u6CD5 | - | Promise |
| reset | \u6E05\u7A7A\u6821\u9A8C\u7ED3\u679C | - | - |
`,25),c=[p],u={setup(r,{expose:s}){return s({frontmatter:{}}),(h,o)=>(n(),a("div",l,c))}};export{u as default};