定制软件elementUI表单上传文件验证

一、目标效果

        定制软件使用进行表单校验的时候,定制软件只能校验输入框、定制软件下拉选择列表等内容,定制软件就是没看到可以校验文件上传,定制软件这意味着你需要手动实现!定制软件目标效果如下:

        总而言之,定制软件就是这样的效果:(1) 不点击复选框,点击提交,可以通过校验;(2)点击复选框,不上传文件,校验不通过;(3)点击复选框,上传文件,提示字样消失,且校验通过;(4)点击复选框,显示必传的样式显示,不点击复选框,则不提示红点;

二、踩坑记录

        1、在form-item中需要填写prop,还需要在data中填写rules,并且prop的值与rules对应的规则相一致,不然起不到校验效果。

 

 

        2、自定义规则的时候,不写callback,则校验不生效

 

        3、此处会用到动态设置校验,很多人第一反应就是动态设置prop,即这样书写:

:prop=” 条件? '自己定义的rules下的规则' ? ' '  “

            3.1 这样的prop不生效,要写成:prop=” 条件? '自己定义的rules下的规则' ? 'empty'  “

                3.1.1 这样写还是有问题,万一以后自己在rules下定义的规则为empty呢,所以最佳做法不要动态设置prop,将prop写死,在规则校验器里面校验。

 

        4、的 action="https://jsonplaceholder.typicode.com/posts/" ,上传文件时会报跨域错误,且有时候报503错误。跨域的问题可以通过谷歌浏览器插件 

Allow CORS: Access-Control-Allow-Origin0.1.5  得到解决;其实在真实项目中,action后面跟的是后端的地址,这两个问题都自然迎刃而解。

 

        5、红点的生成采用动态绑定类名实现:

:class="条件?’is-required‘ :’ ‘ "

 

        6、通过 this.$refs.refName.clearValidate(prop值) 去清空校验提示字样

三、代码实现

  1. <template>
  2. <div id="app">
  3. <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px">
  4. <el-form-item label="活动名称:" :class="showFlag ? 'is-required' : ''" prop="file">
  5. <el-upload action="https://jsonplaceholder.typicode.com/posts/" :on-remove="handleRemove"
  6. :on-success="uploadSuccess">
  7. <el-button size="small" type="primary">点击上传</el-button>
  8. </el-upload>
  9. </el-form-item>
  10. <el-form-item label="必上传文件:">
  11. <input type="checkbox" v-model="showFlag" @change="handleCheckBoxChange" />
  12. </el-form-item>
  13. <el-form-item>
  14. <el-button type="primary" @click="onSubmit">提交</el-button>
  15. </el-form-item>
  16. </el-form>
  17. </div>
  18. </template>
  19. <script>
  20. export default {
  21. name: 'App',
  22. data() {
  23. // 文件上传校验规则
  24. const fileMustUpload = (rule, value, callback) => {
  25. if (this.showFlag && this.file == null) {
  26. // 未上传文件
  27. callback("请上传文件");
  28. }
  29. callback();
  30. }
  31. return {
  32. showFlag: false, //判断红点是否显示,与复选框的值绑定在一起
  33. ruleForm: {
  34. file: null //接受文件值
  35. },
  36. rules: {
  37. file: [
  38. //自定义校验器
  39. { validator: fileMustUpload, trigger: 'change' }
  40. ]
  41. }
  42. }
  43. },
  44. methods: {
  45. // 文件移除事件监听
  46. handleRemove() {
  47. this.file = null;
  48. },
  49. // 提交
  50. onSubmit() {
  51. this.$refs.ruleForm.validate((valid) => {
  52. if (valid) {
  53. alert('上传成功!');
  54. }
  55. });
  56. },
  57. // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
  58. uploadSuccess(file) {
  59. this.clearFileUploadValidate();
  60. this.file = file
  61. },
  62. // 清空文件上传校验
  63. clearFileUploadValidate() {
  64. this.$refs.ruleForm.clearValidate('file');
  65. },
  66. // 监听复选框值的变化
  67. handleCheckBoxChange(event) {
  68. // 复选框的值绑定给showFlag,并用它来控制红点必填样式
  69. this.showFlag = event.target.checked;
  70. if (!this.showFlag) {
  71. this.clearFileUploadValidate();
  72. }
  73. }
  74. },
  75. }
  76. </script>
  77. <style>
  78. .el-form {
  79. position: absolute;
  80. top: 50%;
  81. left: 50%;
  82. transform: translate(-50%, -50%);
  83. }
  84. #app {
  85. height: 100%;
  86. }
  87. </style>

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发