# 表单

# 不同状态的表单项



这是用户名字段帮助说明
<template>
    <div class="demo-form-column" style="width: 550px;">
        <!--
        1. statusIcon 值为 true,显示默认图标。默认图标有 成功、失败、警告 等,不同的状态图标不同
        2. statusIcon 值为 false,不显示图标
        3. statusIcon 值类型为 function,可以自定义右侧状态图标
        4. statusIcon 为 slot(插槽),可自定义右侧状态图标
        -->
        <div>
            <t-radio-group v-model="formStatusIcon" variant="default-filled">
                <t-radio-button :value="true">显示校验图标</t-radio-button>
                <t-radio-button :value="false">隐藏校验图标</t-radio-button>
            </t-radio-group>
            <t-radio-group v-model="formData.labelAlign" variant="default-filled">
                <t-radio-button value="left">左对齐</t-radio-button>
                <t-radio-button value="right">右对齐</t-radio-button>
                <t-radio-button value="top">顶部对齐</t-radio-button>
            </t-radio-group>
        </div>
        <br /><br />
        <t-form
        :data="formData"
        :rules="rules"
        :labelWidth="80"
        :statusIcon="formStatusIcon"
        :labelAlign="formData.labelAlign"
        ref="formValidatorStatus"
        @reset="onReset"
        @submit="onSubmit"
        >
            <t-form-item label="失败" name="fail">
                <t-input v-model="formData.fail" placeholder="校验不通过状态"></t-input>
            </t-form-item>
            <t-form-item label="警告" name="warning">
                <t-input v-model="formData.warning" placeholder="校验警告状态"></t-input>
            </t-form-item>
            <t-form-item label="成功" name="success" help="这是用户名字段帮助说明">
                <t-input v-model="formData.success" placeholder="不带绿色边框的成功状态"></t-input>
            </t-form-item>
            <t-form-item label="成功" name="success" successBorder>
                <t-input v-model="formData.success" placeholder="带绿色边框的成功状态"></t-input>
            </t-form-item>
            <t-form-item label="失败" name="failB" :statusIcon="false">
                <t-input v-model="formData.failB" placeholder="隐藏状态图标"></t-input>
            </t-form-item>
            <t-form-item label="警告" name="warningB">
                <t-input v-model="formData.warningB" placeholder="校验警告状态"></t-input>
            </t-form-item>
            <t-form-item label="加载中" name="loading">
                <t-input v-model="formData.loading" placeholder="正在校验中,请稍等"></t-input>
                <template #statusIcon>
                    <div style="width: 24px; display: flex; justify-content: center">
                        <i slot="statusIcon" class="care-icon-refresh"></i>
                    </div>
                </template>
            </t-form-item>

            <!-- 自定义图标:可以使用渲染函数 statusIcon,也可以使用插槽 statusIcon -->
            <t-form-item label="帮助" name="help">
                <t-input v-model="formData.help" placeholder="自定义右侧图标"></t-input>
                <template #statusIcon>
                    <div style="width: 24px; display: flex; justify-content: center">
                        <i slot="statusIcon" class="care-icon-help"></i>
                    </div>
                </template>
            </t-form-item>

            <t-form-item v-for="(item, index) in addlist" :key="item.id" label="新增" :name="item.name">
                <t-input v-model="formData[item.name]"></t-input>
                <t-button
                v-if="item.id === 0 || item.id === lastAddItem - 1"
                @click="addItem"
                slot="statusIcon"
                variant="dashed"
                >
                    <i name="add" class="care-icon-add"></i>
                </t-button>
                <t-button v-if="item.id > 0" @click="removeItem(item, index)" slot="statusIcon" variant="dashed">
                    <i name="remove" class="care-icon-minus"></i>
                </t-button>
            </t-form-item>

            <t-form-item :statusIcon="false" style="padding-top: 8px">
                <t-button theme="primary" type="submit" style="margin-right: 10px">提交</t-button>
                <t-button theme="default" variant="base" type="reset">重置</t-button>
            </t-form-item>
        </t-form>
    </div>
</template>
<script>
const INITIAL_DATA = {
    fail: '',
    warning: '',
    success: '',
    failB: '',
    warningB: '',
    loading: '',
    add: '',
    help: '',
    labelAlign: 'right',
};

export default {
    data() {
        return {
            formStatusIcon: true,
            formData: { ...INITIAL_DATA },
            rules: {
                fail: [{ required: true, message: '必填选项', type: 'error' }],
                warning: [{ required: true, message: '必填', type: 'warning' }],
                success: [{ validator: () => true }],
                failB: [{ required: true, message: '必填', type: 'error' }],
                warningB: [{ required: true, message: '必填', type: 'warning' }],
            },
            addlist: [{ id: 0, name: 'add0' }],
            lastAddItem: 1,
        };
    },
    mounted() {
        this.$refs.formValidatorStatus.validate();
    },
    methods: {
        addItem() {
            const addNum = this.lastAddItem;
            INITIAL_DATA[`add${addNum}`] = '';
            this.addlist.push({ id: addNum, name: `add${addNum}` });
            this.lastAddItem += 1;
        },
        removeItem(item, index) {
            delete INITIAL_DATA[`add${item.id}`];
            this.addlist.splice(index, 1);
        },
        onReset() {
            this.$message.success('重置成功');
        },
        onSubmit({ validateResult, firstError }) {
            if (validateResult === true) {
                this.$message.success('提交成功');
            } else {
                console.log('Errors: ', validateResult);
                this.$message.warning(firstError);
            }
        },
    },
};
</script>

显示代码 复制代码

# 登陆表单

<template>
    <div style="width: 350px">
        <t-form
        :data="formData"
        ref="form"
        @reset="onReset"
        @submit="onSubmit"
        :colon="true"
        :labelWidth="0"
        >
            <t-form-item name='account'>
                <t-input clearable v-model="formData.account" placeholder="请输入账户名">
                    <i slot="prefix-icon" class="care-icon-user"></i>
                </t-input>
            </t-form-item>
            <t-form-item name='password'>
                <t-input type="password" clearable v-model="formData.password" placeholder="请输入密码">
                    <i slot="prefix-icon" class="care-icon-lock-close"></i>
                </t-input>
            </t-form-item>
            <t-form-item style="padding-top: 8px">
                <t-button theme="primary" type="submit" block >登录</t-button>
            </t-form-item>
        </t-form>
    </div>
</template>
<script>

const INITIAL_DATA = {
  account: '',
  password: '',
};

export default {
  data() {
    return {
      formData: { ...INITIAL_DATA },
    };
  },

  methods: {
    onReset() {
      this.$message.success('重置成功');
    },
    onSubmit({ validateResult, firstError }) {
      if (validateResult === true) {
        this.$message.success('提交成功');
      } else {
        console.log('Errors: ', validateResult);
        this.$message.warning(firstError);
      }
    },
  },
};
</script>
显示代码 复制代码