美文网首页
ant design vue-1.6.2---------for

ant design vue-1.6.2---------for

作者: 懒懒猫 | 来源:发表于2022-05-10 16:52 被阅读0次

    1.form表单的使用

    标签
    <a-form ref="refForm" :form="form" :colon="false" layout="inline" labelAlign="right">
             <a-row>
            <a-col class="left-colon-padding" :lg="6" :sm="0" />
            <a-col :lg="16" :sm="24">
              <a-form-item v-else label="手机号码" required>
                <a-input v-decorator="['telephone', formRules.mobile]" placeholder="请输入手机号码" />
              </a-form-item>
            </a-col>
          </a-row>
    
    ...
    
    js使用
    export default {
    
      data () {
        return {
          form: this.$form.createForm(this), // 表单ref
        }
      },
      methods: {
        submit () {
             // 刷新表单
             this.form.resetFields() 
              // 设置表单项初始值
            this.form.getFieldDecorator('telephone', { initialValue: this.basicData.telephone, preserve: true })
            // 获取表单项值
            this.form.getFieldValue('telephone')
            // 设置表单项值
            this.form.setFieldsValue({ 'telephone': 15236958642})
    
          }
      }
    },
    

    二,图片上传封装组件

    <template>
      <div>
        <a-upload
          name="file"
          list-type="picture-card"
          :class="['avatar-uploader', isCard ? (isFront ? 'front-uploader' : 'back-uploader') : '']"
          :show-upload-list="false"
          :action="requestUrl"
          :headers="headers"
          :before-upload="beforeUpload"
          :remove="removeFn"
          :data="reporterType"
          method="post"
          @change="handleChange"
          :file="requestUrl"
          v-decorator="[
            'file',
            {
              getValueFromEvent: normFile,
              rules: [{ required: true, message: '请上传证件照' }],
              trigger: ['blur']
            }
          ]"
        >
          <div v-if="imagePreviewUrl" class="upload-img-wrap">
            <img :src="imagePreviewUrl" alt="avatar" />
            <div>重新上传</div>
          </div>
          <div v-else>
            <a-icon v-if="loading" type="loading" />
            <img v-else :src="require('@/assets/add.png')" alt="" style="width: 22px;margin-top:13px" />
            <div class="ant-upload-text">
              {{ uploadText ? uploadText : '上传图片' }}
            </div>
          </div>
        </a-upload>
        <div class="upload-info">仅支持.jpg格式<span v-if="imageUrl" @click="emptyImg">删除</span></div>
      </div>
    </template>
    <script>
    import storage from 'store'
    import { ACCESS_TOKEN } from '@/store/mutation-types'
    function getBase64 (img, callback) {
      const reader = new FileReader()
      reader.addEventListener('load', () => callback(reader.result))
      reader.readAsDataURL(img)
    }
    export default {
      props: {
        /**
         * isFront 是否为身份证正面 false 不是正面
         */
        isFront: {
          type: Boolean,
          default: false
        },
        isCard: {
          type: Boolean,
          default: false
        },
        uploadText: {
          type: String,
          default: ''
        },
        imageUrl: {
          type: String,
          default: ''
        },
        reporterType: {
          type: Object,
          default: null
        },
        changImgStaus: {
          type: Boolean,
          default: false
        }
      },
      data () {
        return {
          loading: false,
          // imageUrl: this.imageUrl1,
          imagePreviewUrl: '',
          requestUrl: process.env.VUE_APP_API_BASE_URL + '/file/uploadFile',
          headers: {
            Authorization: storage.get(ACCESS_TOKEN)
          }
        }
      },
      watch: {
        imageUrl: {
          handler (val) {
            this.imagePreviewUrl = val ? process.env.VUE_APP_API_BASE_File_URL + val : ''
          },
          immediate: true
        },
        changImgStaus (val) {
          if (!val) {
            this.imagePreviewUrl = ''
          }
        }
      },
      methods: {
        handleChange (info) {
          if (info.file.status === 'uploading') {
            this.loading = true
            return
          }
          if (info.file.status === 'done') {
            const { data = {} } = info.file.response
            // Get this url from response in real world.
            getBase64(info.file.originFileObj, imageUrl => {
              this.imagePreviewUrl = process.env.VUE_APP_API_BASE_File_URL + data.filePath.localPath
              this.$emit('change', data.filePath)
              this.loading = false
            })
          }
        },
        beforeUpload (file) {
          const isJpgOrPng = file.type === 'image/jpeg'
          if (!isJpgOrPng) {
            this.$message.error('仅支持.jpg格式')
          }
          const isLt2M = file.size / 1024 / 1024 < 2
          if (!isLt2M) {
            this.$message.error('Image must smaller than 2MB!')
          }
          return isJpgOrPng && isLt2M
        },
        removeFn (e) {
          this.emptyImg()
        },
        emptyImg () {
          this.imagePreviewUrl = ''
          this.$emit('change', null)
        },
        normFile (e) {
          if (Array.isArray(e)) {
            return e
          }
          return e && e.fileList
        }
      }
    }
    </script>
    <style lang="less" scoped>
    /deep/.ant-upload-picture-card-wrapper {
      width: 14%;
      margin-right: 32px;
    }
    /deep/.avatar-uploader .ant-upload {
      width: 106px;
      height: 68px;
    }
    /deep/.avatar-uploader .ant-upload:hover {
      .upload-img-wrap > div {
        display: block;
      }
    }
    /deep/.avatar-uploader.front-uploader .ant-upload {
      background: url('../../assets/frontIdCard.png');
      background-size: 100%;
    }
    /deep/.avatar-uploader.back-uploader .ant-upload {
      background: url('../../assets/sideIdCard.png');
      background-size: 100%;
    }
    /deep/.ant-upload-select-picture-card i {
      font-size: 32px;
      color: #999;
    }
    /deep/.ant-upload.ant-upload-select-picture-card .ant-upload {
      padding: 0;
    }
    
    /deep/.ant-upload-select-picture-card .ant-upload-text {
      margin-top: 3px;
      font-size: 14px;
      font-weight: 500;
      color: #878c95;
    }
    /deep/.upload-img-wrap {
      width: 106px;
      height: 68px;
      position: relative;
      img {
        width: 106px;
        height: 68px;
      }
      & > div {
        width: 106px;
        height: 68px;
        line-height: 68px;
        text-align: center;
        border-radius: 4px;
        background: rgba(0, 0, 0, 0.64);
        position: absolute;
        z-index: 10;
        left: 0;
        top: 0;
        font-size: 14px;
        color: #fff;
        display: none;
      }
    }
    .upload-info {
      width: 122px;
      font-size: 12px;
      color: #afb4b9;
      margin-top: 4px;
      margin-bottom: 12px;
      margin-left: -8px;
      text-align: center;
      span {
        padding-left: 8px;
        font-size: 12px;
        font-weight: 400;
        color: #24a1ff;
        cursor: pointer;
      }
    }
    </style>
    
    

    相关文章

      网友评论

          本文标题:ant design vue-1.6.2---------for

          本文链接:https://www.haomeiwen.com/subject/byadurtx.html