kui-vue
Version:
A lightweight desktop UI component library suitable for Vue.js 2.
165 lines (162 loc) • 4.8 kB
Markdown
<cn>
#### 辅助校验
校验一些数据类型
</cn>
```vue
<template>
<div style="max-width:600px">
<Form
name="rules"
:rules="rules"
:model="form"
@submit="submit"
:wrapperCol="wrapperCol"
:labelCol="labelCol"
>
<FormItem label="Number" prop="number">
<Input clearable placeholder="校验数字" />
</FormItem>
<FormItem label="Text" prop="text">
<Input clearable placeholder="校验字符长度" />
</FormItem>
<FormItem label="E-mail" prop="email">
<Input clearable placeholder="校验邮箱" />
</FormItem>
<FormItem label="Phone Number" prop="phone">
<Input placeholder="校验手机号" />
</FormItem>
<FormItem label="Password" prop="pwd">
<Input type="password" placeholder="校验密码" />
</FormItem>
<FormItem label="Confirm Password" prop="repwd">
<Input type="password" placeholder="校验重复密码" />
</FormItem>
<FormItem label="Country">
<FormItem prop="country">
<Select clearable style="width:100%;">
<Option value="0" label="China" />
<Option value="1" label="Russia" />
</Select>
</FormItem>
<FormItem prop="city">
<Select clearable style="width:100%;">
<Option value="0" label="Shanghai" />
<Option value="1" label="Wuhan" />
<Option value="2" label="Hangzhou" />
</Select>
</FormItem>
</FormItem>
<FormItem label="Hobby" prop="hobbys">
<CheckboxGroup>
<Checkbox value="0" label="Football" />
<Checkbox value="1" label="Music" />
<Checkbox value="2" label="Photograph" />
<Checkbox value="3" label="Tennis" />
</CheckboxGroup>
</FormItem>
<FormItem label="Other" prop="other">
<TextArea placeholder="校验文本长度" />
</FormItem>
<FormItem :wrapperCol="{ offset: 6 }">
<Button type="primary" htmlType="submit">Submit</Button>
<Button style="margin:0 10px" htmlType="reset">Reset</Button>
<Button theme="dashed" @click="setValue">Set Value</Button>
</FormItem>
</Form>
</div>
</template>
<script setup>
import { ref, reactive } from "vue";
import { message } from "kui-vue";
const validatePass = (rule, value, callback) => {
if (value !== form.value.pwd) {
return callback(new Error("两次密码不一致"));
}
callback();
};
const timer = ref(null);
const time = ref(0);
const labelCol = { span: 6 };
const wrapperCol = { span: 16 };
const form = ref({
number: "",
text: "",
email: "",
phone: "",
pwd: "",
repwd: "",
country: "",
city: "",
hobbys: [],
other: "",
});
const rules = {
number: [
{ required: true, message: "请填写数字" },
{ type: "number", message: "只能填写数字" },
],
text: [
{ required: true, message: "此项必填" },
{ max: 5, message: "最多只能输入5个字符" },
],
email: [
{ type: "mail", message: "请输入有效的电子邮箱" },
{ required: true, message: "请输入电子邮箱" },
],
pwd: [
{ min: 8, max: 20, message: "密码长度请控制在8-20位之间", trigger: "blur" },
{ required: true, message: "请输入密码" },
],
repwd: [
{ min: 8, max: 20, message: "密码长度请控制在8-20位之间", trigger: "blur" },
{ validator: validatePass },
{ required: true, message: "请重复输入密码" },
],
phone: [
{ type: "mobile", message: "请输入正确的手机号码" },
{ required: true, message: "请输入手机号" },
],
country: [{ required: true, message: "请选择国家" }],
city: [{ required: true, message: "请选择城市" }],
hobbys: [
{ required: true, message: "请选择爱好" },
{ max: 3, message: "最多只能选择3个爱好" },
{ min: 2, message: "最少选择2个爱好" },
],
other: [
{ required: true, message: "请填写其他信息" },
{ max: 5, message: "最多只能输入5个字符" },
],
};
const setValue = () => {
form.value = {
number: 123,
text: "bacd",
email: "master@k-ui.cn",
pwd: "abc@123@123",
repwd: "abc@123@123",
phone: "13888888888",
country: "1",
city: "1",
hobbys: ["0", "1"],
other: "abcd",
};
};
const sendCode = () => {
message.success("验证码发送成功,请注意查收");
clearInterval(timer.value);
timer.value = setInterval((e) => {
if (time.value < 1) {
clearInterval(timer.value);
time.value = 60;
} else {
time.value -= 1;
}
}, 1000);
};
const submit = ({ valid, model }) => {
message[valid ? "success" : "error"](valid ? "success" : "faild");
console.log(model);
};
</script>
```