Vue3+antDesignVue实现表单校验

本文介绍了如何在Vue应用中使用AntDesign库创建一个包含项目基本信息(如创建人、项目代码、名称等)、技术水平选择、项目类型选项以及文件上传功能的表单,并附带了详细的验证规则。
摘要由CSDN通过智能技术生成

<a-form
      ref="form"
      :model="form"
      :rules="rules"
      :label-col="{ md: { span: 6 }, sm: { span: 24 } }"
      :wrapper-col="{ md: { span: 18 }, sm: { span: 24 } }"
    >
      <!--      <a-form-item label='创建人:' name='createdBy'>-->
      <!--        <a-input-number v-model:value='form.createdBy' placeholder='请输入创建人' allow-clear autocomplete='off' style="width: 100%" />-->
      <!--      </a-form-item>-->

      <a-form-item label="项目编号:" name="projectCode">
        <a-input v-model:value="form.projectCode" placeholder="请输入项目编号" style="width: 50%" allow-clear autocomplete="off" />
      </a-form-item>
      <a-form-item label="项目名称:" name="projectName">
        <a-input v-model:value="form.projectName" placeholder="请输入项目名称" style="width: 50%" allow-clear autocomplete="off" />
      </a-form-item>
      <a-form-item label="项目承担单位:" name="company">
        <a-input v-model:value="form.company" placeholder="请输入项目承担单位" style="width: 50%" allow-clear autocomplete="off" />
      </a-form-item>
      <a-form-item label="项目目的和意义:" name="purpose">
        <a-textarea v-model:value="form.purpose" placeholder="请输入项目目的和意义" style="width: 50%" allow-clear autocomplete="off" />
      </a-form-item>
      <a-form-item label="技术水平:" name="level">
        <a-select
          ref="select"
          v-model:value="form.level"
          style="width: 40%"
          placeholder="请选择技术水平"
          @focus="focus"
          @change="handleChange"
        >
          <a-select-option value="国际先进">国际先进</a-select-option>
          <a-select-option value="国际领先">国际领先</a-select-option>
          <a-select-option value="国内先进">国内先进</a-select-option>
          <a-select-option value="国内领先">国内领先</a-select-option>
        </a-select>
      </a-form-item>
      <a-form-item label="项目类型:" name="projectType">
        <a-select
          ref="select"
          v-model:value="form.projectType"
          placeholder="请选择项目类型"
          style="width: 40%"
          @focus="focus"
          @change="handleChange"
        >
          <a-select-option value="产学研合作">产学研合作</a-select-option>
          <a-select-option value="自主研发">自主研发</a-select-option>
          <a-select-option value="其他">其他</a-select-option>
        </a-select>
      </a-form-item>
      <a-form-item label="项目主要内容:" name="content">
        <a-textarea v-model:value="form.content" placeholder="请输入项目主要内容" style="width: 50%" allow-clear autocomplete="off" />
      </a-form-item>
      <a-form-item label="项目前期准备工作、调研计划:" name="plan">
        <a-textarea
          v-model:value="form.plan"
          placeholder="请输入项目前期准备工作、调研计划"
          style="width: 50%"
          allow-clear
          autocomplete="off"
        />
      </a-form-item>
      <a-form-item label="项目预计科技投入总额:" name="investment">
        <a-input-number
          v-model:value="form.investment"
          placeholder="请输入项目预计科技投入总额"
          style="width: 50%"
          allow-clear
          autocomplete="off"
          addon-before="RMB"
          addon-after="万元"
        />
      </a-form-item>
      <a-form-item label="前期准备工作进展、项目调研进展:" name="progress">
        <a-textarea
          v-model:value="form.progress"
          placeholder="请输入前期准备工作进展、项目调研进展"
          style="width: 50%"
          allow-clear
          autocomplete="off"
        />
      </a-form-item>
      <a-form-item label="已累计投入总额:" name="spent">
        <a-input-number
          v-model:value="form.spent"
          placeholder="请输入已累计投入总额"
          style="width: 50%"
          allow-clear
          autocomplete="off"
          addon-before="RMB"
          addon-after="万元"
        />
      </a-form-item>
      <a-form-item label="项目调研报告(或总结):" name="report">
        <a-upload
          name="file"
          ref="uploadRef"
          class="upload-list"
          v-model:file-list="fileList"
          :multiple="false"
          :action="FileUploadUrl"
          :headers="headers"
          :before-upload="beforeUpload"
          :custom-request="customRequest"
          @change="handleChange"
          @remove="handleRemove"
        >
          <a-button v-if="fileList.length < 1">
            <template #icon>
              <CloudUploadOutlined />
            </template>
            <span>选择文件</span>
          </a-button>
        </a-upload>
      </a-form-item>
    </a-form>

 data() {
    return {
      fileList: [],

      // 表单数据
      form: Object.assign({}, this.data),
      // 表单验证规则
      rules: {
        createdBy: [{ required: true, message: '请输入创建人', type: 'number', trigger: 'blur' }],
        projectName: [{ required: true, message: '请输入项目名称', type: 'string', trigger: 'blur' }],
        company: [{ required: true, message: '请输入项目承担单位', type: 'string', trigger: 'blur' }],
        purpose: [{ required: true, message: '请输入项目目的和意义', type: 'string', trigger: 'blur' }],
        level: [{ required: true, message: '请输入技术水平', type: 'string', trigger: 'blur' }],
        projectType: [{ required: true, message: '请输入项目类型', type: 'string', trigger: 'blur' }],
        content: [{ required: true, message: '请输入项目主要内容', type: 'string', trigger: 'blur' }],
        plan: [{ required: true, message: '请输入项目前期准备工作、调研计划', type: 'string', trigger: 'blur' }],
        investment: [{ required: true, message: '请输入项目预计科技投入总额', type: 'number', trigger: 'blur' }],
        postTime: [{ required: true, message: '请输入', type: 'string', trigger: 'blur' }],
        status: [{ required: true, message: '请输入', type: 'string', trigger: 'blur' }],
        progress: [{ required: true, message: '请输入前期准备工作进展、项目调研进展', type: 'string', trigger: 'blur' }],
        report: [{ required: true, message: '请输入项目调研报告(或总结)', type: 'change', trigger: 'blur' }],
        projectCode: [{ required: true, message: '请输入项目编号', type: 'string', trigger: 'blur' }],
        spent: [{ required: true, message: '请输入已累计投入总额', type: 'number', trigger: 'blur' }]
      },
      // 提交状态
      loading: false,
      headers: {
        Authorization: getToken()
      },
      // 是否是修改
      isUpdate: false
    };
  },

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在 Vue 3 中使用 Ant Design VueForm 表单组件进行确认密码校验,你可以自定义校验规则来实现。下面是一个示例: ```vue <template> <a-form ref="form" :model="formData"> <a-form-item label="密码" name="password" rules="required"> <a-input type="password" v-model="formData.password" /> </a-form-item> <a-form-item label="确认密码" name="confirmPassword" rules="required,checkPassword"> <a-input type="password" v-model="formData.confirmPassword" /> </a-form-item> <a-form-item> <a-button type="primary" @click="submitForm">提交</a-button> </a-form-item> </a-form> </template> <script> import { ref } from 'vue'; import { Form, Input, Button, message } from 'ant-design-vue'; export default { components: { 'a-form': Form, 'a-form-item': Form.Item, 'a-input': Input, 'a-button': Button }, setup() { const formRef = ref(null); const formData = ref({ password: '', confirmPassword: '' }); const checkPassword = (_, value) => { if (value !== formData.password) { return Promise.reject(new Error('两次密码输入不一致')); } return Promise.resolve(); }; const submitForm = () => { formRef.value.validate((valid) => { if (valid) { // 验证通过,执行表单提交操作 console.log('表单验证通过'); // ... } else { console.log('表单验证失败'); } }); }; return { formRef, formData, checkPassword, submitForm }; } }; </script> ``` 在上述示例中,我们在确认密码字段的 `a-form-item` 组件上定义了一个名为 `checkPassword` 的校验规则。该规则使用了一个自定义校验函数,并在函数内部判断确认密码是否与密码字段的值相同。如果不相同,我们使用 `Promise.reject` 返回一个错误信息,表示校验失败;如果相同,我们使用 `Promise.resolve` 表示校验通过。 然后,我们将这个校验规则 `checkPassword` 应用到确认密码字段的 `rules` 属性中,通过逗号分隔多个规则。注意,我们还将 "required" 规则也应用到了确认密码字段上,以确保确认密码不能为空。 在 `submitForm` 方法中,我们使用 `formRef.value.validate` 方法来进行表单验证,当验证完成后执行回调函数。你可以在回调函数中处理验证通过和验证失败的情况。 希望以上信息对你有帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m87里的光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值