TUI

0.3.7
Empty 空缺内容
用于项目中通用的空缺内容填充展示
基础用法

示例代码
vue
<template>
  <TsForm :model="formData" :rules="rules" ref="normalFormRef" labelWidth="100px">
    <TsFormItem label="Username" prop="username" required>
      <TsInput v-model="formData.username" placeholder="Enter username" />
    </TsFormItem>

    <TsFormItem label="Password" prop="password" required>
      <TsInput v-model="formData.password" type="password" placeholder="Enter password" />
    </TsFormItem>

    <TsFormItem label="Email" prop="email">
      <TsInput v-model="formData.email" placeholder="Enter email" />
    </TsFormItem>

    <TsFormItem>
      <TsButton type="primary" @click="handleNormalSubmit">Submit</TsButton>
      <TsButton @click="resetNormalForm" style="margin-left: 10px">Reset</TsButton>
    </TsFormItem>
  </TsForm>
</template>

<script setup lang="ts">
  import { ref } from 'vue';

  const rules: FormRules = {
    username: [
      { required: true, message: 'Please input username', trigger: 'blur' },
      { min: 3, max: 10, message: 'Length should be 3 to 10', trigger: 'blur' },
    ],
    password: [
      { required: true, message: 'Please input password', trigger: 'blur' },
      { min: 6, message: 'At least 6 characters', trigger: 'blur' },
    ],
    email: [{ type: 'email', message: 'Please input correct email', trigger: 'blur' }],
  };

  const formData = ref({
    username: '',
    password: '',
    email: '',
    gender: '',
    agree: false,
  });

  const handleNormalSubmit = async () => {
    await normalFormRef.value?.validate();
  };

  const resetNormalForm = () => {
    normalFormRef.value?.resetFields();
  };
</script>
inline表单

示例代码
vue
<template>
  <TsForm :model="formData" :rules="rules" ref="searchFormRef" inline>
    <TsFormItem label="Username" prop="username" required>
      <TsInput v-model="formData.username" placeholder="Enter username" clearable />
    </TsFormItem>

    <TsFormItem label="Password" prop="password" required>
      <TsInput v-model="formData.password" type="password" placeholder="Enter password" />
    </TsFormItem>

    <TsFormItem label="Email" prop="email">
      <TsInput v-model="formData.email" placeholder="Enter email" />
    </TsFormItem>

    <TsFormItem>
      <TsButton type="primary" :loading="searchLoading" @click="handleSearch">Search</TsButton>
      <TsButton @click="handleRestSearch" style="margin-left: 10px">Reset</TsButton>
    </TsFormItem>
  </TsForm>
</template>

<script setup lang="ts">
  import { ref } from 'vue';

  const rules: FormRules = {
    username: [
      { required: true, message: 'Please input username', trigger: 'blur' },
      { min: 3, max: 10, message: 'Length should be 3 to 10', trigger: 'blur' },
    ],
    password: [
      { required: true, message: 'Please input password', trigger: 'blur' },
      { min: 6, message: 'At least 6 characters', trigger: 'blur' },
    ],
    email: [{ type: 'email', message: 'Please input correct email', trigger: 'blur' }],
  };

  const formData = ref({
    username: '',
    password: '',
    email: '',
    gender: '',
    agree: false,
  });

  const searchLoading = ref(false);

  const handleSearch = () => {
    if (!searchFormRef.value || searchLoading.value) return;

    searchFormRef.value.validate().then((validated) => {
      console.log(validated);
      if (!validated) return;

      searchLoading.value = true;
      setTimeout(() => {
        TsToast({ message: '搜索成功', type: 'success' });
        searchLoading.value = false;
      }, 2000);
    });
  };

  const handleRestSearch = () => {
    searchFormRef.value?.resetFields();
  };
</script>
label Position 配置

Select gender
示例代码
vue
<template>
  <TsForm :model="formData" :rules="rules" ref="formRef" labelPosition="top">
  <TsFormItem label="Username" prop="username" required>
    <TsInput v-model="formData.username" placeholder="Enter username" />
  </TsFormItem>

  <TsFormItem label="Password" prop="password" required>
    <TsInput v-model="formData.password" type="password" placeholder="Enter password" />
  </TsFormItem>

  <TsFormItem label="Email" prop="email">
    <TsInput v-model="formData.email" placeholder="Enter email" />
  </TsFormItem>

  <TsFormItem label="Gender" prop="gender">
    <TsSelect v-model="formData.gender" :options="genderOption" placeholder="Select gender" />
  </TsFormItem>

  <TsFormItem label="Agree" prop="agree">
    <TsSwitch v-model="formData.agree" placeholder="Choose agree" />
  </TsFormItem>

  <TsFormItem>
    <TsButton type="primary" @click="handleSubmit">Submit</TsButton>
    <TsButton @click="resetForm" style="margin-left: 10px">Reset</TsButton>
  </TsFormItem>
</template>

<script setup lang="ts">
  import { ref } from 'vue';

  const rules: FormRules = {
    username: [
      { required: true, message: 'Please input username', trigger: 'blur' },
      { min: 3, max: 10, message: 'Length should be 3 to 10', trigger: 'blur' },
    ],
    password: [
      { required: true, message: 'Please input password', trigger: 'blur' },
      { min: 6, message: 'At least 6 characters', trigger: 'blur' },
    ],
    email: [{ type: 'email', message: 'Please input correct email', trigger: 'blur' }],
  };

  const formData = ref({
    username: '',
    password: '',
    email: '',
    gender: '',
    agree: false,
  });

  const handleSubmit = async () => {
    try {
      await formRef.value?.validate();
      console.log('Form submitted:', formData.value);
    } catch (error) {
      console.error('Form validation failed:', error);
    }
  };

  // Reset form
  const resetForm = () => {
    formRef.value?.resetFields();
    formRef.value?.clearValidate();
  };
</script>
属性 Props
属性名
说明
类型
可选值
默认值
版本说明
model
表单数据
Record<string, any>
rules
表单规则
FormRules
520px
labelPosition
标签位置
String
left / right / top
right
labelWidth
标签宽度
String | number
inline
是否为行内表单
Boolean
false
hideRequiredAsterisk
是否显示星号
Boolean
false
插槽 Slots
插槽名
说明
default
自定义的插槽内容, 会覆盖 text 属性
事件 Events
事件名
说明
类型
validate
校验
boolean
validateField
校验单个字段
boolean
resetFields
重置表单
void
clearValidate
清除校验
void
getFieldValue
获取字段值
any
setFieldValue
设置字段值
void
FormRules Props
属性名
说明
类型
可选值
默认值
required
是否必填
Boolean
-
message
校验失败提示
String
-
trigger
触发校验的事件
String
-
pattern
正则表达式
RegExp
-
min
最小值
Number
-
max
最大值
Number
-
type
校验类型
String
-
validator
自定义校验函数
Function
-